<feed xmlns='http://www.w3.org/2005/Atom'>
<title>glusterfs.git/tests/basic/ec/ec-12-4.t, branch v3.7.9</title>
<subtitle></subtitle>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/glusterfs.git/'/>
<entry>
<title>test/ec: Fix spurious failures caused by self-heal</title>
<updated>2014-10-03T09:01:26+00:00</updated>
<author>
<name>Xavier Hernandez</name>
<email>xhernandez@datalab.es</email>
</author>
<published>2014-09-18T16:42:34+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/glusterfs.git/commit/?id=a97ad9b69bb17f2351c59512fa9c6cb25d82b4da'/>
<id>a97ad9b69bb17f2351c59512fa9c6cb25d82b4da</id>
<content type='text'>
The sha1sum of a file may update the access time of that file.
If this happens while a brick is down, as it is forced in the
test, that brick doesn't get the update, getting out of sync.

When the brick is restarted, self-heal repairs the file, but
the test shouldn't access brick contents until self-heal finishes.
If this is combined with a kill of another brick before self-heal
has finished repairing the file, the volume could become inaccessible.

Since the purpose of these tests is only to check ec functionality
(there is another test that checks self-heal), the test that corrupts
the file has been removed.

Additional checks to validate the state of the volume have been added
to avoid some timing issues.

BUG: 1144108
Change-Id: Ibd9288de519914663998a1fbc4321ec92ed6082c
Signed-off-by: Xavier Hernandez &lt;xhernandez@datalab.es&gt;
Reviewed-on: http://review.gluster.org/8892
Reviewed-by: Emmanuel Dreyfus &lt;manu@netbsd.org&gt;
Tested-by: Emmanuel Dreyfus &lt;manu@netbsd.org&gt;
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Dan Lambright &lt;dlambrig@redhat.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The sha1sum of a file may update the access time of that file.
If this happens while a brick is down, as it is forced in the
test, that brick doesn't get the update, getting out of sync.

When the brick is restarted, self-heal repairs the file, but
the test shouldn't access brick contents until self-heal finishes.
If this is combined with a kill of another brick before self-heal
has finished repairing the file, the volume could become inaccessible.

Since the purpose of these tests is only to check ec functionality
(there is another test that checks self-heal), the test that corrupts
the file has been removed.

Additional checks to validate the state of the volume have been added
to avoid some timing issues.

BUG: 1144108
Change-Id: Ibd9288de519914663998a1fbc4321ec92ed6082c
Signed-off-by: Xavier Hernandez &lt;xhernandez@datalab.es&gt;
Reviewed-on: http://review.gluster.org/8892
Reviewed-by: Emmanuel Dreyfus &lt;manu@netbsd.org&gt;
Tested-by: Emmanuel Dreyfus &lt;manu@netbsd.org&gt;
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Dan Lambright &lt;dlambrig@redhat.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli/glusterd: Added support for dispersed volumes</title>
<updated>2014-07-11T17:34:24+00:00</updated>
<author>
<name>Xavier Hernandez</name>
<email>xhernandez@datalab.es</email>
</author>
<published>2014-05-15T08:35:14+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/glusterfs.git/commit/?id=1392da3e237d8ea080573909015916e3544a6d2c'/>
<id>1392da3e237d8ea080573909015916e3544a6d2c</id>
<content type='text'>
Two new options have been added to the 'create' command of the cli
interface:

    disperse [&lt;count&gt;] redundancy &lt;count&gt;

Both are optional. A dispersed volume is created by specifying, at
least, one of them. If 'disperse' is missing or it's present but
'&lt;count&gt;' does not, the number of bricks enumerated in the command
line is taken as the disperse count.

If 'redundancy' is missing, the lowest optimal value is assumed. A
configuration is considered optimal (for most workloads) when the
disperse count - redundancy count is a power of 2. If the resulting
redundancy is 1, the volume is created normally, but if it's greater
than 1, a warning is shown to the user and he/she must answer yes/no
to continue volume creation. If there isn't any optimal value for
the given number of bricks, a warning is also shown and, if the user
accepts, a redundancy of 1 is used.

If 'redundancy' is specified and the resulting volume is not optimal,
another warning is shown to the user.

A distributed-disperse volume can be created using a number of bricks
multiple of the disperse count.

Change-Id: Iab93efbe78e905cdb91f54f3741599f7ea6645e4
BUG: 1118629
Signed-off-by: Xavier Hernandez &lt;xhernandez@datalab.es&gt;
Reviewed-on: http://review.gluster.org/7782
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Jeff Darcy &lt;jdarcy@redhat.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Two new options have been added to the 'create' command of the cli
interface:

    disperse [&lt;count&gt;] redundancy &lt;count&gt;

Both are optional. A dispersed volume is created by specifying, at
least, one of them. If 'disperse' is missing or it's present but
'&lt;count&gt;' does not, the number of bricks enumerated in the command
line is taken as the disperse count.

If 'redundancy' is missing, the lowest optimal value is assumed. A
configuration is considered optimal (for most workloads) when the
disperse count - redundancy count is a power of 2. If the resulting
redundancy is 1, the volume is created normally, but if it's greater
than 1, a warning is shown to the user and he/she must answer yes/no
to continue volume creation. If there isn't any optimal value for
the given number of bricks, a warning is also shown and, if the user
accepts, a redundancy of 1 is used.

If 'redundancy' is specified and the resulting volume is not optimal,
another warning is shown to the user.

A distributed-disperse volume can be created using a number of bricks
multiple of the disperse count.

Change-Id: Iab93efbe78e905cdb91f54f3741599f7ea6645e4
BUG: 1118629
Signed-off-by: Xavier Hernandez &lt;xhernandez@datalab.es&gt;
Reviewed-on: http://review.gluster.org/7782
Tested-by: Gluster Build System &lt;jenkins@build.gluster.com&gt;
Reviewed-by: Jeff Darcy &lt;jdarcy@redhat.com&gt;
Reviewed-by: Vijay Bellur &lt;vbellur@redhat.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
0&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>Diffstat</a></div><table summary='diffstat' class='diffstat'><tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/glusterfs-guts/src/fuse-bridge.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>glusterfs-guts/src/fuse-bridge.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.3%;'/><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/call-stub.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/call-stub.c</a></td><td class='right'>225</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 56.5%;'/><td class='rem' style='width: 16.1%;'/><td class='none' style='width: 27.4%;'/></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.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/call-stub.h</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 22.6%;'/><td class='rem' style='width: 5.8%;'/><td class='none' style='width: 71.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/defaults.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/defaults.c</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 23.5%;'/><td class='rem' style='width: 9.7%;'/><td class='none' style='width: 66.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/defaults.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/defaults.h</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.3%;'/><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/protocol.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/protocol.h</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.4%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 89.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/xlator.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/xlator.h</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 16.1%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 79.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfsclient/src/libglusterfsclient.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfsclient/src/libglusterfsclient.c</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 18.7%;'/><td class='rem' style='width: 11.0%;'/><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/cluster/afr/src/afr-dir-write.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-dir-write.c</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.8%;'/><td class='rem' style='width: 3.9%;'/><td class='none' style='width: 89.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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-inode-read.c</a></td><td class='right'>2</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/afr/src/afr-inode-write.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-inode-write.c</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.9%;'/><td class='rem' style='width: 2.9%;'/><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/cluster/afr/src/afr-self-heal-algorithm.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-algorithm.c</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 0.6%;'/><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/cluster/afr/src/afr-self-heal-common.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-common.c</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.9%;'/><td class='rem' style='width: 1.0%;'/><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/cluster/afr/src/afr-self-heal-data.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-data.c</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.9%;'/><td class='rem' style='width: 1.3%;'/><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-entry.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-entry.c</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.2%;'/><td class='rem' style='width: 2.6%;'/><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/xlators/cluster/afr/src/afr-self-heal-metadata.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-metadata.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.3%;'/><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/cluster/afr/src/afr.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr.c</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 2.6%;'/><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/cluster/dht/src/dht-common.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-common.c</a></td><td class='right'>184</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 50.6%;'/><td class='rem' style='width: 8.7%;'/><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/cluster/dht/src/dht-linkfile.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-linkfile.c</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 1.9%;'/><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/dht/src/dht-rename.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-rename.c</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.2%;'/><td class='rem' style='width: 1.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/cluster/dht/src/dht-selfheal.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-selfheal.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.3%;'/><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/cluster/dht/src/nufa.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/nufa.c</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 96.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ha/src/ha.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/ha/src/ha.c</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 18.1%;'/><td class='rem' style='width: 7.7%;'/><td class='none' style='width: 74.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/map/src/map.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/map/src/map.c</a></td><td class='right'>72</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 15.2%;'/><td class='rem' style='width: 8.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/cluster/stripe/src/stripe.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/stripe/src/stripe.c</a></td><td class='right'>310</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 91.9%;'/><td class='rem' style='width: 8.1%;'/><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/cluster/unify/src/unify.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/unify/src/unify.c</a></td><td class='right'>197</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 50.6%;'/><td class='rem' style='width: 12.9%;'/><td class='none' style='width: 36.5%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/debug/error-gen/src/error-gen.c</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 15.8%;'/><td class='rem' style='width: 6.5%;'/><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/debug/io-stats/src/io-stats.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/debug/io-stats/src/io-stats.c</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 14.8%;'/><td class='rem' style='width: 6.8%;'/><td class='none' style='width: 78.4%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/debug/trace/src/trace.c</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 17.1%;'/><td class='rem' style='width: 9.0%;'/><td class='none' style='width: 73.9%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/encryption/rot-13/src/rot-13.c</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 0.6%;'/><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/features/filter/src/filter.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/features/filter/src/filter.c</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 15.2%;'/><td class='rem' style='width: 7.1%;'/><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/features/locks/src/posix.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/features/locks/src/posix.c</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 2.6%;'/><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/path-convertor/src/path.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/features/path-convertor/src/path.c</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 21.3%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 73.9%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/features/quota/src/quota.c</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.7%;'/><td class='rem' style='width: 5.8%;'/><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/features/trash/src/trash.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/features/trash/src/trash.c</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 21.6%;'/><td class='rem' style='width: 3.5%;'/><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/mount/fuse/src/fuse-bridge.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/mount/fuse/src/fuse-bridge.c</a></td><td class='right'>257</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 77.7%;'/><td class='rem' style='width: 5.2%;'/><td class='none' style='width: 17.1%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/io-cache/src/io-cache.c</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 11.3%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 85.8%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/io-threads/src/io-threads.c</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 11.6%;'/><td class='rem' style='width: 7.1%;'/><td class='none' style='width: 81.3%;'/></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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/quick-read/src/quick-read.c</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.4%;'/><td class='rem' style='width: 7.4%;'/><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/performance/read-ahead/src/read-ahead.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/read-ahead/src/read-ahead.c</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.7%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 87.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/stat-prefetch/src/stat-prefetch.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/stat-prefetch/src/stat-prefetch.c</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 15.2%;'/><td class='rem' style='width: 6.1%;'/><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/performance/symlink-cache/src/symlink-cache.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/symlink-cache/src/symlink-cache.c</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.0%;'/><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/performance/write-behind/src/write-behind.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/performance/write-behind/src/write-behind.c</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.8%;'/><td class='rem' style='width: 3.5%;'/><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/protocol/client/src/client-protocol.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/protocol/client/src/client-protocol.c</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.3%;'/><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/protocol/server/src/server-dentry.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/protocol/server/src/server-dentry.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.3%;'/><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/server/src/server-protocol.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/protocol/server/src/server-protocol.c</a></td><td class='right'>105</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 21.3%;'/><td class='rem' style='width: 12.6%;'/><td class='none' style='width: 66.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/bdb/src/bdb.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/storage/bdb/src/bdb.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.3%;'/><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/storage/posix/src/posix.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/storage/posix/src/posix.c</a></td><td class='right'>2</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>
</table><div class='diffstat-summary'>48 files changed, 2148 insertions, 658 deletions</div><table summary='diff' class='diff'><tr><td><div class='head'>diff --git a/glusterfs-guts/src/fuse-bridge.c b/glusterfs-guts/src/fuse-bridge.c<br/>index f0bf05ebd8c..156a4a86856 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/glusterfs-guts/src/fuse-bridge.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>glusterfs-guts/src/fuse-bridge.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/glusterfs-guts/src/fuse-bridge.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>glusterfs-guts/src/fuse-bridge.c</a></div><div class='hunk'>@@ -316,7 +316,8 @@ fuse_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		 int32_t op_errno,</div><div class='ctx'> 		 inode_t *inode,</div><div class='ctx'> 		 struct stat *stat,</div><div class='del'>-		 dict_t *dict);</div><div class='add'>+                 dict_t *dict,</div><div class='add'>+                 struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='ctx'> fuse_entry_cbk (call_frame_t *frame,</div><div class='head'>diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c<br/>index 89a212807d0..bc7d556c22f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/call-stub.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfs/src/call-stub.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/call-stub.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/call-stub.c</a></div><div class='hunk'>@@ -82,7 +82,8 @@ fop_lookup_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     inode_t *inode,</div><div class='ctx'> 		     struct stat *buf,</div><div class='del'>-		     dict_t *dict)</div><div class='add'>+                     dict_t *dict,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -100,6 +101,8 @@ fop_lookup_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		stub-&gt;args.lookup_cbk.buf = *buf;</div><div class='ctx'> 	if (dict)</div><div class='ctx'> 		stub-&gt;args.lookup_cbk.dict = dict_ref (dict);</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.lookup_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -412,7 +415,8 @@ fop_truncate_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		       fop_truncate_cbk_t fn,</div><div class='ctx'> 		       int32_t op_ret,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='del'>-		       struct stat *buf)</div><div class='add'>+		       struct stat *prebuf,</div><div class='add'>+                       struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -424,8 +428,10 @@ fop_truncate_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.truncate_cbk.fn = fn;</div><div class='ctx'> 	stub-&gt;args.truncate_cbk.op_ret = op_ret;</div><div class='ctx'> 	stub-&gt;args.truncate_cbk.op_errno = op_errno;</div><div class='del'>-	if (buf)</div><div class='del'>-		stub-&gt;args.truncate_cbk.buf = *buf;</div><div class='add'>+	if (prebuf)</div><div class='add'>+		stub-&gt;args.truncate_cbk.prebuf = *prebuf;</div><div class='add'>+        if (postbuf)</div><div class='add'>+                stub-&gt;args.truncate_cbk.postbuf = *postbuf;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -459,7 +465,8 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 			fop_ftruncate_cbk_t fn,</div><div class='ctx'> 			int32_t op_ret,</div><div class='ctx'> 			int32_t op_errno,</div><div class='del'>-			struct stat *buf)</div><div class='add'>+			struct stat *prebuf,</div><div class='add'>+                        struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -471,8 +478,10 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.ftruncate_cbk.fn = fn;</div><div class='ctx'> 	stub-&gt;args.ftruncate_cbk.op_ret = op_ret;</div><div class='ctx'> 	stub-&gt;args.ftruncate_cbk.op_errno = op_errno;</div><div class='del'>-	if (buf)</div><div class='del'>-		stub-&gt;args.ftruncate_cbk.buf = *buf;</div><div class='add'>+	if (prebuf)</div><div class='add'>+		stub-&gt;args.ftruncate_cbk.prebuf = *prebuf;</div><div class='add'>+	if (postbuf)</div><div class='add'>+		stub-&gt;args.ftruncate_cbk.postbuf = *postbuf;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -595,7 +604,8 @@ fop_readlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		       fop_readlink_cbk_t fn,</div><div class='ctx'> 		       int32_t op_ret,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='del'>-		       const char *path)</div><div class='add'>+		       const char *path,</div><div class='add'>+                       struct stat *sbuf)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -609,6 +619,8 @@ fop_readlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.readlink_cbk.op_errno = op_errno;</div><div class='ctx'> 	if (path)</div><div class='ctx'> 		stub-&gt;args.readlink_cbk.buf = strdup (path);</div><div class='add'>+        if (sbuf)</div><div class='add'>+                stub-&gt;args.readlink_cbk.sbuf = *sbuf;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -644,7 +656,9 @@ fop_mknod_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='del'>-		    struct stat *buf)</div><div class='add'>+                    struct stat *buf,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -660,6 +674,10 @@ fop_mknod_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		stub-&gt;args.mknod_cbk.inode = inode_ref (inode);</div><div class='ctx'> 	if (buf)</div><div class='ctx'> 		stub-&gt;args.mknod_cbk.buf = *buf;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.mknod_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.mknod_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -693,7 +711,9 @@ fop_mkdir_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='del'>-		    struct stat *buf)</div><div class='add'>+                    struct stat *buf,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -709,6 +729,10 @@ fop_mkdir_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		stub-&gt;args.mkdir_cbk.inode = inode_ref (inode);</div><div class='ctx'> 	if (buf)</div><div class='ctx'> 		stub-&gt;args.mkdir_cbk.buf = *buf;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.mkdir_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.mkdir_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -738,7 +762,9 @@ call_stub_t *</div><div class='ctx'> fop_unlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     fop_unlink_cbk_t fn,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='del'>-		     int32_t op_errno)</div><div class='add'>+		     int32_t op_errno,</div><div class='add'>+                     struct stat *preparent,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -750,6 +776,10 @@ fop_unlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.unlink_cbk.fn = fn;</div><div class='ctx'> 	stub-&gt;args.unlink_cbk.op_ret = op_ret;</div><div class='ctx'> 	stub-&gt;args.unlink_cbk.op_errno = op_errno;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.unlink_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.unlink_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -780,7 +810,9 @@ call_stub_t *</div><div class='ctx'> fop_rmdir_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    fop_rmdir_cbk_t fn,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno)</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -792,6 +824,10 @@ fop_rmdir_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.rmdir_cbk.fn = fn;</div><div class='ctx'> 	stub-&gt;args.rmdir_cbk.op_ret = op_ret;</div><div class='ctx'> 	stub-&gt;args.rmdir_cbk.op_errno = op_errno;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.rmdir_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.rmdir_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -826,7 +862,9 @@ fop_symlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		      int32_t op_ret,</div><div class='ctx'> 		      int32_t op_errno,</div><div class='ctx'> 		      inode_t *inode,</div><div class='del'>-		      struct stat *buf)</div><div class='add'>+                      struct stat *buf,</div><div class='add'>+                      struct stat *preparent,</div><div class='add'>+                      struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -842,6 +880,10 @@ fop_symlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		stub-&gt;args.symlink_cbk.inode = inode_ref (inode);</div><div class='ctx'> 	if (buf)</div><div class='ctx'> 		stub-&gt;args.symlink_cbk.buf = *buf;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.symlink_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.symlink_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -875,7 +917,11 @@ fop_rename_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     fop_rename_cbk_t fn,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='del'>-		     struct stat *buf)</div><div class='add'>+		     struct stat *buf,</div><div class='add'>+                     struct stat *preoldparent,</div><div class='add'>+                     struct stat *postoldparent,</div><div class='add'>+                     struct stat *prenewparent,</div><div class='add'>+                     struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -889,6 +935,14 @@ fop_rename_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.rename_cbk.op_errno = op_errno;</div><div class='ctx'> 	if (buf)</div><div class='ctx'> 		stub-&gt;args.rename_cbk.buf = *buf;</div><div class='add'>+        if (preoldparent)</div><div class='add'>+                stub-&gt;args.rename_cbk.preoldparent = *preoldparent;</div><div class='add'>+        if (postoldparent)</div><div class='add'>+                stub-&gt;args.rename_cbk.postoldparent = *postoldparent;</div><div class='add'>+        if (prenewparent)</div><div class='add'>+                stub-&gt;args.rename_cbk.prenewparent = *prenewparent;</div><div class='add'>+        if (postnewparent)</div><div class='add'>+                stub-&gt;args.rename_cbk.postnewparent = *postnewparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -924,7 +978,9 @@ fop_link_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='ctx'> 		   int32_t op_errno,</div><div class='ctx'> 		   inode_t *inode,</div><div class='del'>-		   struct stat *buf)</div><div class='add'>+                   struct stat *buf,</div><div class='add'>+                   struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -940,6 +996,10 @@ fop_link_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		stub-&gt;args.link_cbk.inode = inode_ref (inode);</div><div class='ctx'> 	if (buf)</div><div class='ctx'> 		stub-&gt;args.link_cbk.buf = *buf;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.link_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.link_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -978,7 +1038,9 @@ fop_create_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     fd_t *fd,</div><div class='ctx'> 		     inode_t *inode,</div><div class='del'>-		     struct stat *buf)</div><div class='add'>+		     struct stat *buf,</div><div class='add'>+                     struct stat *preparent,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -996,6 +1058,10 @@ fop_create_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		stub-&gt;args.create_cbk.inode = inode_ref (inode);</div><div class='ctx'> 	if (buf)</div><div class='ctx'> 		stub-&gt;args.create_cbk.buf = *buf;</div><div class='add'>+        if (preparent)</div><div class='add'>+                stub-&gt;args.create_cbk.preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+                stub-&gt;args.create_cbk.postparent = *postparent;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -1005,7 +1071,8 @@ call_stub_t *</div><div class='ctx'> fop_open_stub (call_frame_t *frame,</div><div class='ctx'> 	       fop_open_t fn,</div><div class='ctx'> 	       loc_t *loc,</div><div class='del'>-	       int32_t flags, fd_t *fd)</div><div class='add'>+	       int32_t flags, fd_t *fd,</div><div class='add'>+               int32_t wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -1018,6 +1085,7 @@ fop_open_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.open.fn = fn;</div><div class='ctx'> 	loc_copy (&amp;stub-&gt;args.open.loc, loc);</div><div class='ctx'> 	stub-&gt;args.open.flags = flags;</div><div class='add'>+        stub-&gt;args.open.wbflags = wbflags;</div><div class='ctx'> 	if (fd)</div><div class='ctx'> 		stub-&gt;args.open.fd = fd_ref (fd);</div><div class='ctx'> out:</div><div class='hunk'>@@ -1140,7 +1208,8 @@ fop_writev_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     fop_writev_cbk_t fn,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='del'>-		     struct stat *stbuf)</div><div class='add'>+                     struct stat *prebuf,</div><div class='add'>+		     struct stat *postbuf)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='hunk'>@@ -1154,7 +1223,9 @@ fop_writev_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.writev_cbk.op_ret = op_ret;</div><div class='ctx'> 	stub-&gt;args.writev_cbk.op_errno = op_errno;</div><div class='ctx'> 	if (op_ret &gt;= 0)</div><div class='del'>-		stub-&gt;args.writev_cbk.stbuf = *stbuf;</div><div class='add'>+		stub-&gt;args.writev_cbk.postbuf = *postbuf;</div><div class='add'>+        if (prebuf)</div><div class='add'>+                stub-&gt;args.writev_cbk.prebuf = *prebuf;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -1231,8 +1302,9 @@ call_stub_t *</div><div class='ctx'> fop_fsync_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    fop_fsync_cbk_t fn,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno)</div><div class='del'>-</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *prebuf,</div><div class='add'>+                    struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -1244,6 +1316,10 @@ fop_fsync_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 	stub-&gt;args.fsync_cbk.fn = fn;</div><div class='ctx'> 	stub-&gt;args.fsync_cbk.op_ret = op_ret;</div><div class='ctx'> 	stub-&gt;args.fsync_cbk.op_errno = op_errno;</div><div class='add'>+        if (prebuf)</div><div class='add'>+                stub-&gt;args.fsync_cbk.prebuf = *prebuf;</div><div class='add'>+        if (postbuf)</div><div class='add'>+                stub-&gt;args.fsync_cbk.postbuf = *postbuf;</div><div class='ctx'> out:</div><div class='ctx'> 	return stub;</div><div class='ctx'> }</div><div class='hunk'>@@ -2459,7 +2535,8 @@ call_resume_wind (call_stub_t *stub)</div><div class='ctx'> 		stub-&gt;args.open.fn (stub-&gt;frame, </div><div class='ctx'> 				    stub-&gt;frame-&gt;this,</div><div class='ctx'> 				    &amp;stub-&gt;args.open.loc, </div><div class='del'>-				    stub-&gt;args.open.flags, stub-&gt;args.open.fd);</div><div class='add'>+				    stub-&gt;args.open.flags, stub-&gt;args.open.fd,</div><div class='add'>+                                    stub-&gt;args.open.wbflags);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'> 	case GF_FOP_CREATE:</div><div class='hunk'>@@ -2958,7 +3035,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 				      stub-&gt;args.create_cbk.op_errno,</div><div class='ctx'> 				      stub-&gt;args.create_cbk.fd,</div><div class='ctx'> 				      stub-&gt;args.create_cbk.inode,</div><div class='del'>-				      &amp;stub-&gt;args.create_cbk.buf);</div><div class='add'>+				      &amp;stub-&gt;args.create_cbk.buf,</div><div class='add'>+                                      &amp;stub-&gt;args.create_cbk.preparent,</div><div class='add'>+                                      &amp;stub-&gt;args.create_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.create_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						  stub-&gt;frame-&gt;cookie,</div><div class='hunk'>@@ -2967,7 +3046,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 						  stub-&gt;args.create_cbk.op_errno,</div><div class='ctx'> 						  stub-&gt;args.create_cbk.fd,</div><div class='ctx'> 						  stub-&gt;args.create_cbk.inode,</div><div class='del'>-						  &amp;stub-&gt;args.create_cbk.buf);</div><div class='add'>+						  &amp;stub-&gt;args.create_cbk.buf,</div><div class='add'>+                                                  &amp;stub-&gt;args.create_cbk.preparent,</div><div class='add'>+                                                  &amp;stub-&gt;args.create_cbk.postparent);</div><div class='ctx'>       </div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -2996,14 +3077,16 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.readlink_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.readlink_cbk.op_errno,</div><div class='del'>-				      stub-&gt;args.readlink_cbk.buf);</div><div class='add'>+				      stub-&gt;args.readlink_cbk.buf,</div><div class='add'>+                                      &amp;stub-&gt;args.readlink_cbk.sbuf);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.readlink_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						    stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						    stub-&gt;frame-&gt;this,</div><div class='ctx'> 						    stub-&gt;args.readlink_cbk.op_ret,</div><div class='ctx'> 						    stub-&gt;args.readlink_cbk.op_errno,</div><div class='del'>-						    stub-&gt;args.readlink_cbk.buf);</div><div class='add'>+						    stub-&gt;args.readlink_cbk.buf,</div><div class='add'>+                                                    &amp;stub-&gt;args.readlink_cbk.sbuf);</div><div class='ctx'> </div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3015,7 +3098,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 				      stub-&gt;args.mknod_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.mknod_cbk.op_errno,</div><div class='ctx'> 				      stub-&gt;args.mknod_cbk.inode,</div><div class='del'>-				      &amp;stub-&gt;args.mknod_cbk.buf);</div><div class='add'>+                                      &amp;stub-&gt;args.mknod_cbk.buf,</div><div class='add'>+                                      &amp;stub-&gt;args.mknod_cbk.preparent,</div><div class='add'>+                                      &amp;stub-&gt;args.mknod_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.mknod_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						 stub-&gt;frame-&gt;cookie,</div><div class='hunk'>@@ -3023,7 +3108,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 						 stub-&gt;args.mknod_cbk.op_ret,</div><div class='ctx'> 						 stub-&gt;args.mknod_cbk.op_errno,</div><div class='ctx'> 						 stub-&gt;args.mknod_cbk.inode,</div><div class='del'>-						 &amp;stub-&gt;args.mknod_cbk.buf);</div><div class='add'>+                                                 &amp;stub-&gt;args.mknod_cbk.buf,</div><div class='add'>+                                                 &amp;stub-&gt;args.mknod_cbk.preparent,</div><div class='add'>+                                                 &amp;stub-&gt;args.mknod_cbk.postparent);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='hunk'>@@ -3034,7 +3121,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 				      stub-&gt;args.mkdir_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.mkdir_cbk.op_errno,</div><div class='ctx'> 				      stub-&gt;args.mkdir_cbk.inode,</div><div class='del'>-				      &amp;stub-&gt;args.mkdir_cbk.buf);</div><div class='add'>+                                      &amp;stub-&gt;args.mkdir_cbk.buf,</div><div class='add'>+                                      &amp;stub-&gt;args.mkdir_cbk.preparent,</div><div class='add'>+                                      &amp;stub-&gt;args.mkdir_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.mkdir_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						 stub-&gt;frame-&gt;cookie,</div><div class='hunk'>@@ -3042,7 +3131,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 						 stub-&gt;args.mkdir_cbk.op_ret,</div><div class='ctx'> 						 stub-&gt;args.mkdir_cbk.op_errno,</div><div class='ctx'> 						 stub-&gt;args.mkdir_cbk.inode,</div><div class='del'>-						 &amp;stub-&gt;args.mkdir_cbk.buf);</div><div class='add'>+                                                 &amp;stub-&gt;args.mkdir_cbk.buf,</div><div class='add'>+                                                 &amp;stub-&gt;args.mkdir_cbk.preparent,</div><div class='add'>+                                                 &amp;stub-&gt;args.mkdir_cbk.postparent);</div><div class='ctx'> </div><div class='ctx'> 		if (stub-&gt;args.mkdir_cbk.inode)</div><div class='ctx'> 			inode_unref (stub-&gt;args.mkdir_cbk.inode);</div><div class='hunk'>@@ -3055,13 +3146,17 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 		if (!stub-&gt;args.unlink_cbk.fn)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.unlink_cbk.op_ret,</div><div class='del'>-				      stub-&gt;args.unlink_cbk.op_errno);</div><div class='add'>+				      stub-&gt;args.unlink_cbk.op_errno,</div><div class='add'>+                                      &amp;stub-&gt;args.unlink_cbk.preparent,</div><div class='add'>+                                      &amp;stub-&gt;args.unlink_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.unlink_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						  stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						  stub-&gt;frame-&gt;this,</div><div class='ctx'> 						  stub-&gt;args.unlink_cbk.op_ret,</div><div class='del'>-						  stub-&gt;args.unlink_cbk.op_errno);</div><div class='add'>+						  stub-&gt;args.unlink_cbk.op_errno,</div><div class='add'>+                                                  &amp;stub-&gt;args.unlink_cbk.preparent,</div><div class='add'>+                                                  &amp;stub-&gt;args.unlink_cbk.postparent);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'>   </div><div class='hunk'>@@ -3070,13 +3165,17 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 		if (!stub-&gt;args.rmdir_cbk.fn)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.rmdir_cbk.op_ret,</div><div class='del'>-				      stub-&gt;args.rmdir_cbk.op_errno);</div><div class='add'>+				      stub-&gt;args.rmdir_cbk.op_errno,</div><div class='add'>+                                      &amp;stub-&gt;args.rmdir_cbk.preparent,</div><div class='add'>+                                      &amp;stub-&gt;args.rmdir_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.unlink_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						  stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						  stub-&gt;frame-&gt;this,</div><div class='ctx'> 						  stub-&gt;args.rmdir_cbk.op_ret,</div><div class='del'>-						  stub-&gt;args.rmdir_cbk.op_errno);</div><div class='add'>+						  stub-&gt;args.rmdir_cbk.op_errno,</div><div class='add'>+                                                  &amp;stub-&gt;args.rmdir_cbk.preparent,</div><div class='add'>+                                                  &amp;stub-&gt;args.rmdir_cbk.postparent);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='hunk'>@@ -3087,7 +3186,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 				      stub-&gt;args.symlink_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.symlink_cbk.op_errno,</div><div class='ctx'> 				      stub-&gt;args.symlink_cbk.inode,</div><div class='del'>-				      &amp;stub-&gt;args.symlink_cbk.buf);</div><div class='add'>+                                      &amp;stub-&gt;args.symlink_cbk.buf,</div><div class='add'>+                                      &amp;stub-&gt;args.symlink_cbk.preparent,</div><div class='add'>+                                      &amp;stub-&gt;args.symlink_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.symlink_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						   stub-&gt;frame-&gt;cookie,</div><div class='hunk'>@@ -3095,7 +3196,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 						   stub-&gt;args.symlink_cbk.op_ret,</div><div class='ctx'> 						   stub-&gt;args.symlink_cbk.op_errno,</div><div class='ctx'> 						   stub-&gt;args.symlink_cbk.inode,</div><div class='del'>-						   &amp;stub-&gt;args.symlink_cbk.buf);</div><div class='add'>+                                                   &amp;stub-&gt;args.symlink_cbk.buf,</div><div class='add'>+                                                   &amp;stub-&gt;args.symlink_cbk.preparent,</div><div class='add'>+                                                   &amp;stub-&gt;args.symlink_cbk.postparent);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'>   </div><div class='hunk'>@@ -3106,14 +3209,22 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.rename_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.rename_cbk.op_errno,</div><div class='del'>-				      &amp;stub-&gt;args.rename_cbk.buf);</div><div class='add'>+				      &amp;stub-&gt;args.rename_cbk.buf,</div><div class='add'>+                                      &amp;stub-&gt;args.rename_cbk.preoldparent,</div><div class='add'>+                                      &amp;stub-&gt;args.rename_cbk.postoldparent,</div><div class='add'>+                                      &amp;stub-&gt;args.rename_cbk.prenewparent,</div><div class='add'>+                                      &amp;stub-&gt;args.rename_cbk.postnewparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.rename_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						  stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						  stub-&gt;frame-&gt;this,</div><div class='ctx'> 						  stub-&gt;args.rename_cbk.op_ret,</div><div class='ctx'> 						  stub-&gt;args.rename_cbk.op_errno,</div><div class='del'>-						  &amp;stub-&gt;args.rename_cbk.buf);</div><div class='add'>+						  &amp;stub-&gt;args.rename_cbk.buf,</div><div class='add'>+                                                  &amp;stub-&gt;args.rename_cbk.preoldparent,</div><div class='add'>+                                                  &amp;stub-&gt;args.rename_cbk.postoldparent,</div><div class='add'>+                                                  &amp;stub-&gt;args.rename_cbk.prenewparent,</div><div class='add'>+                                                  &amp;stub-&gt;args.rename_cbk.postnewparent);</div><div class='ctx'> #endif</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3133,7 +3244,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 						stub-&gt;args.link_cbk.op_ret,</div><div class='ctx'> 						stub-&gt;args.link_cbk.op_errno,</div><div class='ctx'> 						stub-&gt;args.link_cbk.inode,</div><div class='del'>-						&amp;stub-&gt;args.link_cbk.buf);</div><div class='add'>+                                                &amp;stub-&gt;args.link_cbk.buf,</div><div class='add'>+                                                &amp;stub-&gt;args.link_cbk.preparent,</div><div class='add'>+                                                &amp;stub-&gt;args.link_cbk.postparent);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'>   </div><div class='hunk'>@@ -3177,14 +3290,16 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.truncate_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.truncate_cbk.op_errno,</div><div class='del'>-				      &amp;stub-&gt;args.truncate_cbk.buf);</div><div class='add'>+				      &amp;stub-&gt;args.truncate_cbk.prebuf,</div><div class='add'>+                                      &amp;stub-&gt;args.truncate_cbk.postbuf);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.truncate_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						    stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						    stub-&gt;frame-&gt;this,</div><div class='ctx'> 						    stub-&gt;args.truncate_cbk.op_ret,</div><div class='ctx'> 						    stub-&gt;args.truncate_cbk.op_errno,</div><div class='del'>-						    &amp;stub-&gt;args.truncate_cbk.buf);</div><div class='add'>+						    &amp;stub-&gt;args.truncate_cbk.prebuf,</div><div class='add'>+                                                    &amp;stub-&gt;args.truncate_cbk.postbuf);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'>       </div><div class='hunk'>@@ -3217,14 +3332,16 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.writev_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.writev_cbk.op_errno,</div><div class='del'>-				      &amp;stub-&gt;args.writev_cbk.stbuf);</div><div class='add'>+                                      &amp;stub-&gt;args.writev_cbk.prebuf,</div><div class='add'>+				      &amp;stub-&gt;args.writev_cbk.postbuf);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.writev_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						  stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						  stub-&gt;frame-&gt;this,</div><div class='ctx'> 						  stub-&gt;args.writev_cbk.op_ret,</div><div class='ctx'> 						  stub-&gt;args.writev_cbk.op_errno,</div><div class='del'>-						  &amp;stub-&gt;args.writev_cbk.stbuf);</div><div class='add'>+                                                  &amp;stub-&gt;args.writev_cbk.prebuf,</div><div class='add'>+						  &amp;stub-&gt;args.writev_cbk.postbuf);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'>   </div><div class='hunk'>@@ -3266,13 +3383,17 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 		if (!stub-&gt;args.fsync_cbk.fn)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.fsync_cbk.op_ret,</div><div class='del'>-				      stub-&gt;args.fsync_cbk.op_errno);</div><div class='add'>+				      stub-&gt;args.fsync_cbk.op_errno,</div><div class='add'>+                                      &amp;stub-&gt;args.fsync_cbk.prebuf,</div><div class='add'>+                                      &amp;stub-&gt;args.fsync_cbk.postbuf);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.fsync_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						 stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						 stub-&gt;frame-&gt;this,</div><div class='ctx'> 						 stub-&gt;args.fsync_cbk.op_ret,</div><div class='del'>-						 stub-&gt;args.fsync_cbk.op_errno);</div><div class='add'>+						 stub-&gt;args.fsync_cbk.op_errno,</div><div class='add'>+                                                 &amp;stub-&gt;args.fsync_cbk.prebuf,</div><div class='add'>+                                                 &amp;stub-&gt;args.fsync_cbk.postbuf);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'>   </div><div class='hunk'>@@ -3433,14 +3554,16 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 			STACK_UNWIND (stub-&gt;frame,</div><div class='ctx'> 				      stub-&gt;args.ftruncate_cbk.op_ret,</div><div class='ctx'> 				      stub-&gt;args.ftruncate_cbk.op_errno,</div><div class='del'>-				      &amp;stub-&gt;args.ftruncate_cbk.buf);</div><div class='add'>+				      &amp;stub-&gt;args.ftruncate_cbk.prebuf,</div><div class='add'>+				      &amp;stub-&gt;args.ftruncate_cbk.postbuf);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.ftruncate_cbk.fn (stub-&gt;frame,</div><div class='ctx'> 						     stub-&gt;frame-&gt;cookie,</div><div class='ctx'> 						     stub-&gt;frame-&gt;this,</div><div class='ctx'> 						     stub-&gt;args.ftruncate_cbk.op_ret,</div><div class='ctx'> 						     stub-&gt;args.ftruncate_cbk.op_errno,</div><div class='del'>-						     &amp;stub-&gt;args.ftruncate_cbk.buf);</div><div class='add'>+						     &amp;stub-&gt;args.ftruncate_cbk.prebuf,</div><div class='add'>+						     &amp;stub-&gt;args.ftruncate_cbk.postbuf);</div><div class='ctx'> 		break;</div><div class='ctx'> 	}</div><div class='ctx'>   </div><div class='hunk'>@@ -3605,7 +3728,8 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 				      stub-&gt;args.lookup_cbk.op_errno,</div><div class='ctx'> 				      stub-&gt;args.lookup_cbk.inode,</div><div class='ctx'> 				      &amp;stub-&gt;args.lookup_cbk.buf,</div><div class='del'>-				      stub-&gt;args.lookup_cbk.dict);</div><div class='add'>+                                      stub-&gt;args.lookup_cbk.dict,</div><div class='add'>+                                      &amp;stub-&gt;args.lookup_cbk.postparent);</div><div class='ctx'> 		else</div><div class='ctx'> 			stub-&gt;args.lookup_cbk.fn (stub-&gt;frame, </div><div class='ctx'> 						  stub-&gt;frame-&gt;cookie,</div><div class='hunk'>@@ -3613,8 +3737,9 @@ call_resume_unwind (call_stub_t *stub)</div><div class='ctx'> 						  stub-&gt;args.lookup_cbk.op_ret,</div><div class='ctx'> 						  stub-&gt;args.lookup_cbk.op_errno,</div><div class='ctx'> 						  stub-&gt;args.lookup_cbk.inode,</div><div class='del'>-						  &amp;stub-&gt;args.lookup_cbk.buf, </div><div class='del'>-						  stub-&gt;args.lookup_cbk.dict);</div><div class='add'>+                                                  &amp;stub-&gt;args.lookup_cbk.buf,</div><div class='add'>+                                                  stub-&gt;args.lookup_cbk.dict,</div><div class='add'>+                                                  &amp;stub-&gt;args.lookup_cbk.postparent);</div><div class='ctx'> 		/* FIXME NULL should not be passed */</div><div class='ctx'> </div><div class='ctx'> 		if (stub-&gt;args.lookup_cbk.dict)</div><div class='head'>diff --git a/libglusterfs/src/call-stub.h b/libglusterfs/src/call-stub.h<br/>index 63439478cc4..88e26c24f72 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/call-stub.h?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfs/src/call-stub.h</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/call-stub.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/call-stub.h</a></div><div class='hunk'>@@ -48,6 +48,7 @@ typedef struct {</div><div class='ctx'> 			inode_t *inode;</div><div class='ctx'> 			struct stat buf;</div><div class='ctx'> 			dict_t *dict;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} lookup_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* stat */</div><div class='hunk'>@@ -131,7 +132,8 @@ typedef struct {</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_truncate_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='del'>-			struct stat buf;</div><div class='add'>+			struct stat prebuf;</div><div class='add'>+                        struct stat postbuf;</div><div class='ctx'> 		} truncate_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* ftruncate */</div><div class='hunk'>@@ -143,7 +145,8 @@ typedef struct {</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_ftruncate_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='del'>-			struct stat buf;</div><div class='add'>+			struct stat prebuf;</div><div class='add'>+                        struct stat postbuf;</div><div class='ctx'> 		} ftruncate_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* utimens */</div><div class='hunk'>@@ -179,6 +182,7 @@ typedef struct {</div><div class='ctx'> 			fop_readlink_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='ctx'> 			const char *buf;</div><div class='add'>+                        struct stat sbuf;</div><div class='ctx'> 		} readlink_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* mknod */</div><div class='hunk'>@@ -193,6 +197,8 @@ typedef struct {</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='ctx'> 			inode_t *inode;</div><div class='ctx'> 			struct stat buf;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} mknod_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* mkdir */</div><div class='hunk'>@@ -206,6 +212,8 @@ typedef struct {</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='ctx'> 			inode_t *inode;</div><div class='ctx'> 			struct stat buf;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} mkdir_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* unlink */</div><div class='hunk'>@@ -216,6 +224,8 @@ typedef struct {</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_unlink_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} unlink_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* rmdir */</div><div class='hunk'>@@ -226,6 +236,8 @@ typedef struct {</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_rmdir_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} rmdir_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* symlink */</div><div class='hunk'>@@ -239,6 +251,8 @@ typedef struct {</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='ctx'> 			inode_t *inode;</div><div class='ctx'> 			struct stat buf;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} symlink_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* rename */</div><div class='hunk'>@@ -251,6 +265,10 @@ typedef struct {</div><div class='ctx'> 			fop_rename_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='ctx'> 			struct stat buf;</div><div class='add'>+                        struct stat preoldparent;</div><div class='add'>+                        struct stat postoldparent;</div><div class='add'>+                        struct stat prenewparent;</div><div class='add'>+                        struct stat postnewparent;</div><div class='ctx'> 		} rename_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* link */</div><div class='hunk'>@@ -264,6 +282,8 @@ typedef struct {</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='ctx'> 			inode_t *inode;</div><div class='ctx'> 			struct stat buf;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} link_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* create */</div><div class='hunk'>@@ -280,6 +300,8 @@ typedef struct {</div><div class='ctx'> 			fd_t *fd;</div><div class='ctx'> 			inode_t *inode;</div><div class='ctx'> 			struct stat buf;</div><div class='add'>+                        struct stat preparent;</div><div class='add'>+                        struct stat postparent;</div><div class='ctx'> 		} create_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* open */</div><div class='hunk'>@@ -288,6 +310,7 @@ typedef struct {</div><div class='ctx'> 			loc_t loc;</div><div class='ctx'> 			int32_t flags;</div><div class='ctx'> 			fd_t *fd;</div><div class='add'>+                        int32_t wbflags;</div><div class='ctx'> 		} open;</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_open_cbk_t fn;</div><div class='hunk'>@@ -324,7 +347,8 @@ typedef struct {</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_writev_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='del'>-			struct stat stbuf;</div><div class='add'>+                        struct stat prebuf;</div><div class='add'>+			struct stat postbuf;</div><div class='ctx'> 		} writev_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* flush */</div><div class='hunk'>@@ -346,6 +370,8 @@ typedef struct {</div><div class='ctx'> 		struct {</div><div class='ctx'> 			fop_fsync_cbk_t fn;</div><div class='ctx'> 			int32_t op_ret, op_errno;</div><div class='add'>+                        struct stat prebuf;</div><div class='add'>+                        struct stat postbuf;</div><div class='ctx'> 		} fsync_cbk;</div><div class='ctx'> </div><div class='ctx'> 		/* opendir */</div><div class='hunk'>@@ -678,7 +704,8 @@ fop_lookup_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     inode_t *inode,</div><div class='ctx'> 		     struct stat *buf,</div><div class='del'>-		     dict_t *dict);</div><div class='add'>+                     dict_t *dict,</div><div class='add'>+                     struct stat *postparent);</div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_stat_stub (call_frame_t *frame,</div><div class='ctx'> 	       fop_stat_t fn,</div><div class='hunk'>@@ -760,7 +787,8 @@ fop_truncate_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		       fop_truncate_cbk_t fn,</div><div class='ctx'> 		       int32_t op_ret,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='del'>-		       struct stat *buf);</div><div class='add'>+		       struct stat *prebuf,</div><div class='add'>+                       struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_ftruncate_stub (call_frame_t *frame,</div><div class='hunk'>@@ -773,7 +801,8 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 			fop_ftruncate_cbk_t fn,</div><div class='ctx'> 			int32_t op_ret,</div><div class='ctx'> 			int32_t op_errno,</div><div class='del'>-			struct stat *buf);</div><div class='add'>+			struct stat *prebuf,</div><div class='add'>+                        struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_utimens_stub (call_frame_t *frame,</div><div class='hunk'>@@ -811,7 +840,8 @@ fop_readlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		       fop_readlink_cbk_t fn,</div><div class='ctx'> 		       int32_t op_ret,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='del'>-		       const char *path);</div><div class='add'>+		       const char *path,</div><div class='add'>+                       struct stat *buf);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_mknod_stub (call_frame_t *frame,</div><div class='hunk'>@@ -826,7 +856,9 @@ fop_mknod_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='del'>-		    struct stat *buf);</div><div class='add'>+                    struct stat *buf,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_mkdir_stub (call_frame_t *frame,</div><div class='hunk'>@@ -840,7 +872,9 @@ fop_mkdir_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='del'>-		    struct stat *buf);</div><div class='add'>+                    struct stat *buf,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_unlink_stub (call_frame_t *frame,</div><div class='hunk'>@@ -851,7 +885,9 @@ call_stub_t *</div><div class='ctx'> fop_unlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     fop_unlink_cbk_t fn,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='del'>-		     int32_t op_errno);</div><div class='add'>+		     int32_t op_errno,</div><div class='add'>+                     struct stat *preparent,</div><div class='add'>+                     struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_rmdir_stub (call_frame_t *frame,</div><div class='hunk'>@@ -862,7 +898,9 @@ call_stub_t *</div><div class='ctx'> fop_rmdir_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    fop_rmdir_cbk_t fn,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno);</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_symlink_stub (call_frame_t *frame,</div><div class='hunk'>@@ -876,7 +914,9 @@ fop_symlink_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		      int32_t op_ret,</div><div class='ctx'> 		      int32_t op_errno,</div><div class='ctx'> 		      inode_t *inode,</div><div class='del'>-		      struct stat *buf);</div><div class='add'>+                      struct stat *buf,</div><div class='add'>+                      struct stat *preparent,</div><div class='add'>+                      struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_rename_stub (call_frame_t *frame,</div><div class='hunk'>@@ -889,7 +929,11 @@ fop_rename_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     fop_rename_cbk_t fn,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='del'>-		     struct stat *buf);</div><div class='add'>+		     struct stat *buf,</div><div class='add'>+                     struct stat *preoldparent,</div><div class='add'>+                     struct stat *postoldparent,</div><div class='add'>+                     struct stat *prenewparent,</div><div class='add'>+                     struct stat *postnewparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_link_stub (call_frame_t *frame,</div><div class='hunk'>@@ -903,7 +947,9 @@ fop_link_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='ctx'> 		   int32_t op_errno,</div><div class='ctx'> 		   inode_t *inode,</div><div class='del'>-		   struct stat *buf);</div><div class='add'>+                   struct stat *buf,</div><div class='add'>+                   struct stat *preparent,</div><div class='add'>+                   struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_create_stub (call_frame_t *frame,</div><div class='hunk'>@@ -919,14 +965,17 @@ fop_create_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     fd_t *fd,</div><div class='ctx'> 		     inode_t *inode,</div><div class='del'>-		     struct stat *buf);</div><div class='add'>+		     struct stat *buf,</div><div class='add'>+                     struct stat *preparent,</div><div class='add'>+                     struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_open_stub (call_frame_t *frame,</div><div class='ctx'> 	       fop_open_t fn,</div><div class='ctx'> 	       loc_t *loc,</div><div class='ctx'> 	       int32_t flags,</div><div class='del'>-	       fd_t *fd);</div><div class='add'>+	       fd_t *fd,</div><div class='add'>+               int32_t wbflags);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_open_cbk_stub (call_frame_t *frame,</div><div class='hunk'>@@ -966,7 +1015,8 @@ fop_writev_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		     fop_writev_cbk_t fn,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='del'>-		     struct stat *stbuf);</div><div class='add'>+                     struct stat *prebuf,</div><div class='add'>+                     struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_flush_stub (call_frame_t *frame,</div><div class='hunk'>@@ -989,7 +1039,9 @@ call_stub_t *</div><div class='ctx'> fop_fsync_cbk_stub (call_frame_t *frame,</div><div class='ctx'> 		    fop_fsync_cbk_t fn,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno);</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *prebuf,</div><div class='add'>+                    struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_opendir_stub (call_frame_t *frame,</div><div class='head'>diff --git a/libglusterfs/src/defaults.c b/libglusterfs/src/defaults.c<br/>index f72eca1f819..a2163010331 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/defaults.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfs/src/defaults.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/defaults.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/defaults.c</a></div><div class='hunk'>@@ -41,14 +41,16 @@ default_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='ctx'> 		    struct stat *buf,</div><div class='del'>-		    dict_t *dict)</div><div class='add'>+                    dict_t *dict,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='ctx'> 		      inode,</div><div class='ctx'> 		      buf,</div><div class='del'>-		      dict);</div><div class='add'>+                      dict,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -234,12 +236,14 @@ default_truncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		      xlator_t *this,</div><div class='ctx'> 		      int32_t op_ret,</div><div class='ctx'> 		      int32_t op_errno,</div><div class='del'>-		      struct stat *buf)</div><div class='add'>+		      struct stat *prebuf,</div><div class='add'>+                      struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='del'>-		      buf);</div><div class='add'>+		      prebuf,</div><div class='add'>+                      postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -264,12 +268,14 @@ default_ftruncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		       xlator_t *this,</div><div class='ctx'> 		       int32_t op_ret,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='del'>-		       struct stat *buf)</div><div class='add'>+		       struct stat *prebuf,</div><div class='add'>+                       struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='del'>-		      buf);</div><div class='add'>+		      prebuf,</div><div class='add'>+                      postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -354,12 +360,14 @@ default_readlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		      xlator_t *this,</div><div class='ctx'> 		      int32_t op_ret,</div><div class='ctx'> 		      int32_t op_errno,</div><div class='del'>-		      const char *path)</div><div class='add'>+		      const char *path,</div><div class='add'>+                      struct stat *buf)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='del'>-		      path);</div><div class='add'>+		      path,</div><div class='add'>+                      buf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -386,13 +394,17 @@ default_mknod_cbk (call_frame_t *frame,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='ctx'> 		   int32_t op_errno,</div><div class='ctx'> 		   inode_t *inode,</div><div class='del'>-		   struct stat *buf)</div><div class='add'>+                   struct stat *buf,</div><div class='add'>+                   struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='ctx'> 		      inode,</div><div class='del'>-		      buf);</div><div class='add'>+                      buf,</div><div class='add'>+                      preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -418,13 +430,17 @@ default_mkdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='ctx'> 		   int32_t op_errno,</div><div class='ctx'> 		   inode_t *inode,</div><div class='del'>-		   struct stat *buf)</div><div class='add'>+                   struct stat *buf,</div><div class='add'>+                   struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='ctx'> 		      inode,</div><div class='del'>-		      buf);</div><div class='add'>+                      buf,</div><div class='add'>+                      preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -447,9 +463,11 @@ default_unlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		    void *cookie,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno)</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -471,11 +489,15 @@ default_rmdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		   void *cookie,</div><div class='ctx'> 		   xlator_t *this,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='del'>-		   int32_t op_errno)</div><div class='add'>+		   int32_t op_errno,</div><div class='add'>+                   struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='del'>-		      op_errno);</div><div class='add'>+		      op_errno,</div><div class='add'>+                      preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -500,9 +522,12 @@ default_symlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_ret,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     inode_t *inode,</div><div class='del'>-		     struct stat *buf)</div><div class='add'>+                     struct stat *buf,</div><div class='add'>+                     struct stat *preparent,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, inode,	buf);</div><div class='add'>+        STACK_UNWIND (frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -527,9 +552,14 @@ default_rename_cbk (call_frame_t *frame,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='del'>-		    struct stat *buf)</div><div class='add'>+		    struct stat *buf,</div><div class='add'>+                    struct stat *preoldparent,</div><div class='add'>+                    struct stat *postoldparent,</div><div class='add'>+                    struct stat *prenewparent,</div><div class='add'>+                    struct stat *postnewparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, buf);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, buf, preoldparent, postoldparent,</div><div class='add'>+                      prenewparent, postnewparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -555,9 +585,12 @@ default_link_cbk (call_frame_t *frame,</div><div class='ctx'> 		  int32_t op_ret,</div><div class='ctx'> 		  int32_t op_errno,</div><div class='ctx'> 		  inode_t *inode,</div><div class='del'>-		  struct stat *buf)</div><div class='add'>+                  struct stat *buf,</div><div class='add'>+                  struct stat *preparent,</div><div class='add'>+                  struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, inode,	buf);</div><div class='add'>+        STACK_UNWIND (frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -584,9 +617,12 @@ default_create_cbk (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    fd_t *fd,</div><div class='ctx'> 		    inode_t *inode,</div><div class='del'>-		    struct stat *buf)</div><div class='add'>+		    struct stat *buf,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf, preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -623,13 +659,14 @@ int32_t</div><div class='ctx'> default_open (call_frame_t *frame,</div><div class='ctx'> 	      xlator_t *this,</div><div class='ctx'> 	      loc_t *loc,</div><div class='del'>-	      int32_t flags, fd_t *fd)</div><div class='add'>+	      int32_t flags, fd_t *fd,</div><div class='add'>+              int32_t wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_WIND (frame,</div><div class='ctx'> 		    default_open_cbk,</div><div class='ctx'> 		    FIRST_CHILD(this),</div><div class='ctx'> 		    FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-		    loc, flags, fd);</div><div class='add'>+		    loc, flags, fd, wbflags);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -678,12 +715,14 @@ default_writev_cbk (call_frame_t *frame,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='del'>-		    struct stat *stbuf)</div><div class='add'>+                    struct stat *prebuf,</div><div class='add'>+		    struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='ctx'> 		      op_errno,</div><div class='del'>-		      stbuf);</div><div class='add'>+                      prebuf,</div><div class='add'>+		      postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -740,11 +779,15 @@ default_fsync_cbk (call_frame_t *frame,</div><div class='ctx'> 		   void *cookie,</div><div class='ctx'> 		   xlator_t *this,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='del'>-		   int32_t op_errno)</div><div class='add'>+		   int32_t op_errno,</div><div class='add'>+                   struct stat *prebuf,</div><div class='add'>+                   struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	STACK_UNWIND (frame,</div><div class='ctx'> 		      op_ret,</div><div class='del'>-		      op_errno);</div><div class='add'>+		      op_errno,</div><div class='add'>+                      prebuf,</div><div class='add'>+                      postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='head'>diff --git a/libglusterfs/src/defaults.h b/libglusterfs/src/defaults.h<br/>index d8b99848683..2c167d97ed4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/defaults.h?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfs/src/defaults.h</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/defaults.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/defaults.h</a></div><div class='hunk'>@@ -161,7 +161,8 @@ int32_t default_create (call_frame_t *frame,</div><div class='ctx'> int32_t default_open (call_frame_t *frame,</div><div class='ctx'> 		      xlator_t *this,</div><div class='ctx'> 		      loc_t *loc,</div><div class='del'>-		      int32_t flags, fd_t *fd);</div><div class='add'>+		      int32_t flags, fd_t *fd,</div><div class='add'>+                      int32_t wbflags);</div><div class='ctx'> </div><div class='ctx'> int32_t default_readv (call_frame_t *frame,</div><div class='ctx'> 		       xlator_t *this,</div><div class='head'>diff --git a/libglusterfs/src/protocol.h b/libglusterfs/src/protocol.h<br/>index 91b876a6ff3..59ebaf2bc08 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/protocol.h?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfs/src/protocol.h</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/protocol.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/protocol.h</a></div><div class='hunk'>@@ -337,6 +337,7 @@ typedef struct {</div><div class='ctx'> 	char     path[0];     /* NULL terminated */</div><div class='ctx'> } __attribute__((packed)) gf_fop_readlink_req_t;</div><div class='ctx'> typedef struct {</div><div class='add'>+        struct gf_stat buf;</div><div class='ctx'> 	char     path[0]; /* NULL terminated */</div><div class='ctx'> } __attribute__((packed)) gf_fop_readlink_rsp_t;</div><div class='ctx'> </div><div class='hunk'>@@ -350,6 +351,8 @@ typedef struct {</div><div class='ctx'> } __attribute__((packed)) gf_fop_mknod_req_t;</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_mknod_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -361,6 +364,8 @@ typedef struct {</div><div class='ctx'> } __attribute__((packed)) gf_fop_mkdir_req_t;</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_mkdir_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -370,6 +375,8 @@ typedef struct {</div><div class='ctx'> 	char     bname[0]; /* NULL terminated */</div><div class='ctx'> } __attribute__((packed)) gf_fop_unlink_req_t;</div><div class='ctx'> typedef struct {</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_unlink_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -379,6 +386,8 @@ typedef struct {</div><div class='ctx'> 	char     bname[0]; /* NULL terminated */</div><div class='ctx'> } __attribute__((packed)) gf_fop_rmdir_req_t;</div><div class='ctx'> typedef struct {</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_rmdir_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -390,6 +399,8 @@ typedef struct {</div><div class='ctx'> } __attribute__((packed)) gf_fop_symlink_req_t;</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> }__attribute__((packed)) gf_fop_symlink_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -403,6 +414,10 @@ typedef struct {</div><div class='ctx'> } __attribute__((packed)) gf_fop_rename_req_t;</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='add'>+        struct gf_stat preoldparent;</div><div class='add'>+        struct gf_stat postoldparent;</div><div class='add'>+        struct gf_stat prenewparent;</div><div class='add'>+        struct gf_stat postnewparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_rename_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -415,6 +430,8 @@ typedef struct {</div><div class='ctx'> }__attribute__((packed)) gf_fop_link_req_t;</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_link_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -445,13 +462,15 @@ typedef struct {</div><div class='ctx'> 	char     path[0];</div><div class='ctx'> } __attribute__((packed)) gf_fop_truncate_req_t;</div><div class='ctx'> typedef struct {</div><div class='del'>-	struct gf_stat stat;</div><div class='add'>+	struct gf_stat prestat;</div><div class='add'>+        struct gf_stat poststat;</div><div class='ctx'> } __attribute__((packed)) gf_fop_truncate_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'> typedef struct {</div><div class='ctx'> 	uint64_t ino;</div><div class='ctx'> 	uint32_t flags;</div><div class='add'>+        uint32_t wbflags;</div><div class='ctx'> 	char     path[0];</div><div class='ctx'> } __attribute__((packed)) gf_fop_open_req_t;</div><div class='ctx'> typedef struct {</div><div class='hunk'>@@ -478,7 +497,8 @@ typedef struct {</div><div class='ctx'> 	uint32_t size;</div><div class='ctx'> } __attribute__((packed)) gf_fop_write_req_t;</div><div class='ctx'> typedef struct {</div><div class='del'>-	struct gf_stat stat;</div><div class='add'>+	struct gf_stat prestat;</div><div class='add'>+        struct gf_stat poststat;</div><div class='ctx'> } __attribute__((packed)) gf_fop_write_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -504,6 +524,8 @@ typedef struct fsync_req {</div><div class='ctx'> 	uint32_t data;</div><div class='ctx'> } __attribute__((packed)) gf_fop_fsync_req_t;</div><div class='ctx'> typedef struct {</div><div class='add'>+        struct gf_stat prestat;</div><div class='add'>+        struct gf_stat poststat;</div><div class='ctx'> } __attribute__((packed)) gf_fop_fsync_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -636,6 +658,8 @@ typedef struct {</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='ctx'> 	uint64_t       fd;</div><div class='add'>+        struct gf_stat preparent;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> } __attribute__((packed)) gf_fop_create_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -646,7 +670,8 @@ typedef struct {</div><div class='ctx'> 	uint64_t offset;</div><div class='ctx'> } __attribute__((packed)) gf_fop_ftruncate_req_t;</div><div class='ctx'> typedef struct {</div><div class='del'>-	struct gf_stat stat;</div><div class='add'>+	struct gf_stat prestat;</div><div class='add'>+        struct gf_stat poststat;</div><div class='ctx'> } __attribute__((packed)) gf_fop_ftruncate_rsp_t;</div><div class='ctx'> </div><div class='ctx'> </div><div class='hunk'>@@ -757,6 +782,7 @@ typedef struct {</div><div class='ctx'> } __attribute__((packed)) gf_fop_lookup_req_t;</div><div class='ctx'> typedef struct {</div><div class='ctx'> 	struct gf_stat stat;</div><div class='add'>+        struct gf_stat postparent;</div><div class='ctx'> 	uint32_t       dict_len;</div><div class='ctx'> 	char           dict[0];</div><div class='ctx'> } __attribute__((packed)) gf_fop_lookup_rsp_t;</div><div class='head'>diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h<br/>index afaaed4a4d8..a00d4975d92 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/xlator.h?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfs/src/xlator.h</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/xlator.h?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfs/src/xlator.h</a></div><div class='hunk'>@@ -172,7 +172,8 @@ typedef int32_t (*fop_lookup_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				     int32_t op_errno,</div><div class='ctx'> 				     inode_t *inode,</div><div class='ctx'> 				     struct stat *buf,</div><div class='del'>-				     dict_t *xattr);</div><div class='add'>+                                     dict_t *xattr,</div><div class='add'>+                                     struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_stat_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				   void *cookie,</div><div class='hunk'>@@ -221,14 +222,16 @@ typedef int32_t (*fop_truncate_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				       xlator_t *this,</div><div class='ctx'> 				       int32_t op_ret,</div><div class='ctx'> 				       int32_t op_errno,</div><div class='del'>-				       struct stat *buf);</div><div class='add'>+				       struct stat *prebuf,</div><div class='add'>+                                       struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_ftruncate_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 					void *cookie,</div><div class='ctx'> 					xlator_t *this,</div><div class='ctx'> 					int32_t op_ret,</div><div class='ctx'> 					int32_t op_errno,</div><div class='del'>-					struct stat *buf);</div><div class='add'>+					struct stat *prebuf,</div><div class='add'>+                                        struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_utimens_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				      void *cookie,</div><div class='hunk'>@@ -248,7 +251,8 @@ typedef int32_t (*fop_readlink_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				       xlator_t *this,</div><div class='ctx'> 				       int32_t op_ret,</div><div class='ctx'> 				       int32_t op_errno,</div><div class='del'>-				       const char *path);</div><div class='add'>+				       const char *path,</div><div class='add'>+                                       struct stat *buf);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_mknod_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    void *cookie,</div><div class='hunk'>@@ -256,7 +260,9 @@ typedef int32_t (*fop_mknod_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    int32_t op_ret,</div><div class='ctx'> 				    int32_t op_errno,</div><div class='ctx'> 				    inode_t *inode,</div><div class='del'>-				    struct stat *buf);</div><div class='add'>+                                    struct stat *buf,</div><div class='add'>+                                    struct stat *preparent,</div><div class='add'>+                                    struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_mkdir_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    void *cookie,</div><div class='hunk'>@@ -264,19 +270,25 @@ typedef int32_t (*fop_mkdir_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    int32_t op_ret,</div><div class='ctx'> 				    int32_t op_errno,</div><div class='ctx'> 				    inode_t *inode,</div><div class='del'>-				    struct stat *buf);</div><div class='add'>+                                    struct stat *buf,</div><div class='add'>+                                    struct stat *preparent,</div><div class='add'>+                                    struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_unlink_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				     void *cookie,</div><div class='ctx'> 				     xlator_t *this,</div><div class='ctx'> 				     int32_t op_ret,</div><div class='del'>-				     int32_t op_errno);</div><div class='add'>+				     int32_t op_errno,</div><div class='add'>+                                     struct stat *preparent,</div><div class='add'>+                                     struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_rmdir_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    void *cookie,</div><div class='ctx'> 				    xlator_t *this,</div><div class='ctx'> 				    int32_t op_ret,</div><div class='del'>-				    int32_t op_errno);</div><div class='add'>+				    int32_t op_errno,</div><div class='add'>+                                    struct stat *preparent,</div><div class='add'>+                                    struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_symlink_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				      void *cookie,</div><div class='hunk'>@@ -284,14 +296,20 @@ typedef int32_t (*fop_symlink_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				      int32_t op_ret,</div><div class='ctx'> 				      int32_t op_errno,</div><div class='ctx'> 				      inode_t *inode,</div><div class='del'>-				      struct stat *buf);</div><div class='add'>+                                      struct stat *buf,</div><div class='add'>+                                      struct stat *preparent,</div><div class='add'>+                                      struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_rename_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				     void *cookie,</div><div class='ctx'> 				     xlator_t *this,</div><div class='ctx'> 				     int32_t op_ret,</div><div class='ctx'> 				     int32_t op_errno,</div><div class='del'>-				     struct stat *buf);</div><div class='add'>+				     struct stat *buf,</div><div class='add'>+                                     struct stat *preoldparent,</div><div class='add'>+                                     struct stat *postoldparent,</div><div class='add'>+                                     struct stat *prenewparent,</div><div class='add'>+                                     struct stat *postnewparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_link_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				   void *cookie,</div><div class='hunk'>@@ -299,7 +317,9 @@ typedef int32_t (*fop_link_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				   int32_t op_ret,</div><div class='ctx'> 				   int32_t op_errno,</div><div class='ctx'> 				   inode_t *inode,</div><div class='del'>-				   struct stat *buf);</div><div class='add'>+                                   struct stat *buf,</div><div class='add'>+                                   struct stat *preparent,</div><div class='add'>+                                   struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_create_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				     void *cookie,</div><div class='hunk'>@@ -308,7 +328,9 @@ typedef int32_t (*fop_create_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				     int32_t op_errno,</div><div class='ctx'> 				     fd_t *fd,</div><div class='ctx'> 				     inode_t *inode,</div><div class='del'>-				     struct stat *buf);</div><div class='add'>+				     struct stat *buf,</div><div class='add'>+                                     struct stat *preparent,</div><div class='add'>+                                     struct stat *postparent);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_open_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				   void *cookie,</div><div class='hunk'>@@ -332,7 +354,8 @@ typedef int32_t (*fop_writev_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				     xlator_t *this,</div><div class='ctx'> 				     int32_t op_ret,</div><div class='ctx'> 				     int32_t op_errno,</div><div class='del'>-				     struct stat *stbuf);</div><div class='add'>+				     struct stat *prebuf,</div><div class='add'>+                                     struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_flush_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    void *cookie,</div><div class='hunk'>@@ -344,7 +367,9 @@ typedef int32_t (*fop_fsync_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				    void *cookie,</div><div class='ctx'> 				    xlator_t *this,</div><div class='ctx'> 				    int32_t op_ret,</div><div class='del'>-				    int32_t op_errno);</div><div class='add'>+				    int32_t op_errno,</div><div class='add'>+                                    struct stat *prebuf,</div><div class='add'>+                                    struct stat *postbuf);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_opendir_cbk_t) (call_frame_t *frame,</div><div class='ctx'> 				      void *cookie,</div><div class='hunk'>@@ -593,11 +618,21 @@ typedef int32_t (*fop_create_t) (call_frame_t *frame,</div><div class='ctx'> 				 mode_t mode,</div><div class='ctx'> 				 fd_t *fd);</div><div class='ctx'> </div><div class='add'>+/* Tell subsequent writes on the fd_t to fsync after every writev fop without</div><div class='add'>+ * requiring a fsync fop.</div><div class='add'>+ */</div><div class='add'>+#define GF_OPEN_FSYNC   0x01</div><div class='add'>+</div><div class='add'>+/* Tell write-behind to disable writing behind despite O_SYNC not being set.</div><div class='add'>+ */</div><div class='add'>+#define GF_OPEN_NOWB    0x02</div><div class='add'>+</div><div class='ctx'> typedef int32_t (*fop_open_t) (call_frame_t *frame,</div><div class='ctx'> 			       xlator_t *this,</div><div class='ctx'> 			       loc_t *loc,</div><div class='ctx'> 			       int32_t flags,</div><div class='del'>-			       fd_t *fd);</div><div class='add'>+			       fd_t *fd,</div><div class='add'>+                               int32_t wbflags);</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*fop_readv_t) (call_frame_t *frame,</div><div class='ctx'> 				xlator_t *this,</div><div class='head'>diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c<br/>index 8649b743b49..96154e40887 100755<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfsclient/src/libglusterfsclient.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>libglusterfsclient/src/libglusterfsclient.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfsclient/src/libglusterfsclient.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>libglusterfsclient/src/libglusterfsclient.c</a></div><div class='hunk'>@@ -1888,7 +1888,8 @@ libgf_client_lookup_cbk (call_frame_t *frame,</div><div class='ctx'>                          int32_t op_errno,</div><div class='ctx'>                          inode_t *inode,</div><div class='ctx'>                          struct stat *buf,</div><div class='del'>-                         dict_t *dict)</div><div class='add'>+                         dict_t *dict,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'>         libglusterfs_client_ctx_t *ctx = frame-&gt;root-&gt;state;</div><div class='hunk'>@@ -1959,7 +1960,7 @@ libgf_client_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>         local-&gt;reply_stub = fop_lookup_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                 inode, buf, dict);</div><div class='add'>+                                                 inode, buf, dict, postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -2150,7 +2151,8 @@ libgf_client_lookup_async_cbk (call_frame_t *frame,</div><div class='ctx'>                                int32_t op_errno,</div><div class='ctx'>                                inode_t *inode,</div><div class='ctx'>                                struct stat *stbuf,</div><div class='del'>-                               dict_t *dict)</div><div class='add'>+                               dict_t *dict,</div><div class='add'>+                               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libglusterfs_client_async_local_t *local = frame-&gt;local;</div><div class='ctx'>         glusterfs_get_cbk_t lookup_cbk = local-&gt;fop.lookup_cbk.cbk;</div><div class='hunk'>@@ -2651,7 +2653,7 @@ libgf_client_open (libglusterfs_client_ctx_t *ctx,</div><div class='ctx'>         int32_t op_ret = 0;</div><div class='ctx'>         libgf_client_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        LIBGF_CLIENT_FOP (ctx, stub, open, local, loc, flags, fd);</div><div class='add'>+        LIBGF_CLIENT_FOP (ctx, stub, open, local, loc, flags, fd, 0);</div><div class='ctx'> </div><div class='ctx'>         op_ret = stub-&gt;args.open_cbk.op_ret;</div><div class='ctx'>         errno = stub-&gt;args.open_cbk.op_errno;</div><div class='hunk'>@@ -2672,12 +2674,15 @@ libgf_client_create_cbk (call_frame_t *frame,</div><div class='ctx'>                          int32_t op_errno,</div><div class='ctx'>                          fd_t *fd,</div><div class='ctx'>                          inode_t *inode,</div><div class='del'>-                         struct stat *buf)     </div><div class='add'>+                         struct stat *buf,</div><div class='add'>+                         struct stat *preparent,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_create_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                 fd, inode, buf);</div><div class='add'>+                                                 fd, inode, buf, preparent,</div><div class='add'>+                                                 postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -3752,12 +3757,13 @@ libgf_client_writev_cbk (call_frame_t *frame,</div><div class='ctx'>                          xlator_t *this,</div><div class='ctx'>                          int32_t op_ret,</div><div class='ctx'>                          int32_t op_errno,</div><div class='del'>-                         struct stat *stbuf)</div><div class='add'>+                         struct stat *prebuf,</div><div class='add'>+                         struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_writev_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                 stbuf);</div><div class='add'>+                                                 prebuf, postbuf);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -4353,7 +4359,8 @@ libglusterfs_writev_async_cbk (call_frame_t *frame,</div><div class='ctx'>                                xlator_t *this,</div><div class='ctx'>                                int32_t op_ret,</div><div class='ctx'>                                int32_t op_errno,</div><div class='del'>-                               struct stat *stbuf)</div><div class='add'>+                               struct stat *prebuf,</div><div class='add'>+                               struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         libglusterfs_client_async_local_t *local = frame-&gt;local;</div><div class='ctx'>         fd_t *fd = NULL;</div><div class='hunk'>@@ -4867,12 +4874,15 @@ libgf_client_mkdir_cbk (call_frame_t *frame,</div><div class='ctx'> 			int32_t op_ret,</div><div class='ctx'> 			int32_t op_errno,</div><div class='ctx'> 			inode_t *inode,</div><div class='del'>-			struct stat *buf)</div><div class='add'>+                        struct stat *buf,</div><div class='add'>+                        struct stat *preparent,</div><div class='add'>+                        struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_mkdir_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                inode, buf);</div><div class='add'>+                                                inode, buf, preparent,</div><div class='add'>+                                                postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -5000,11 +5010,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='ctx'> libgf_client_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='add'>+                        int32_t op_ret, int32_t op_errno,struct stat *preparent,</div><div class='add'>+                        struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;reply_stub = fop_rmdir_cbk_stub (frame, NULL, op_ret, op_errno);</div><div class='add'>+        local-&gt;reply_stub = fop_rmdir_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='add'>+                                                preparent, postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -5609,11 +5621,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> libgf_client_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *xlator,</div><div class='del'>-                                int32_t op_ret, int32_t op_errno)</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                        struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t    *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;reply_stub = fop_fsync_cbk_stub (frame, NULL, op_ret, op_errno);</div><div class='add'>+        local-&gt;reply_stub = fop_fsync_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='add'>+                                                prebuf, postbuf);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'> </div><div class='hunk'>@@ -5663,12 +5677,12 @@ out:</div><div class='ctx'> int</div><div class='ctx'> libgf_client_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *xlator</div><div class='ctx'>                                 ,int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                struct stat *buf)</div><div class='add'>+                                struct stat *prebuf, struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t    *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_ftruncate_cbk_stub (frame, NULL, op_ret,</div><div class='del'>-                                                        op_errno, buf);</div><div class='add'>+                                                    op_errno, prebuf, postbuf);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'> </div><div class='hunk'>@@ -5698,9 +5712,9 @@ libgf_client_ftruncate (libglusterfs_client_ctx_t *ctx, fd_t *fd,</div><div class='ctx'>         if (op_ret == -1)</div><div class='ctx'>                 goto out;</div><div class='ctx'> </div><div class='del'>-        libgf_transform_devnum (ctx, &amp;stub-&gt;args.ftruncate_cbk.buf);</div><div class='add'>+        libgf_transform_devnum (ctx, &amp;stub-&gt;args.ftruncate_cbk.postbuf);</div><div class='ctx'>         libgf_update_iattr_cache (fd-&gt;inode, LIBGF_UPDATE_STAT,</div><div class='del'>-                                        &amp;stub-&gt;args.ftruncate_cbk.buf);</div><div class='add'>+                                        &amp;stub-&gt;args.ftruncate_cbk.postbuf);</div><div class='ctx'> </div><div class='ctx'>         fdctx = libgf_get_fd_ctx (fd);</div><div class='ctx'>         if (!fd) {</div><div class='hunk'>@@ -5711,7 +5725,7 @@ libgf_client_ftruncate (libglusterfs_client_ctx_t *ctx, fd_t *fd,</div><div class='ctx'> </div><div class='ctx'>         pthread_mutex_lock (&amp;fdctx-&gt;lock);</div><div class='ctx'>         {</div><div class='del'>-                fdctx-&gt;offset = stub-&gt;args.ftruncate_cbk.buf.st_size;</div><div class='add'>+                fdctx-&gt;offset = stub-&gt;args.ftruncate_cbk.postbuf.st_size;</div><div class='ctx'>         }</div><div class='ctx'>         pthread_mutex_unlock (&amp;fdctx-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -5744,12 +5758,14 @@ out:</div><div class='ctx'> int</div><div class='ctx'> libgf_client_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                inode_t *inode, struct stat *buf)</div><div class='add'>+                                inode_t *inode, struct stat *buf,</div><div class='add'>+                                struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t            *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_link_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                inode, buf);</div><div class='add'>+                                               inode, buf, preparent,</div><div class='add'>+                                               postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'> </div><div class='hunk'>@@ -6121,13 +6137,16 @@ out:</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> libgf_client_rename_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 stat *buf)</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, struct stat *buf,</div><div class='add'>+                         struct stat *preoldparent, struct stat *postoldparent,</div><div class='add'>+                         struct stat *prenewparent, struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_rename_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                 buf);</div><div class='add'>+                                                 buf, preoldparent,</div><div class='add'>+                                                 postoldparent, prenewparent,</div><div class='add'>+                                                 postnewparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -6477,12 +6496,14 @@ out:</div><div class='ctx'> static int32_t</div><div class='ctx'> libgf_client_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                inode_t *inode, struct stat *buf)</div><div class='add'>+                                inode_t *inode, struct stat *buf,</div><div class='add'>+                                struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_mknod_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='del'>-                                                inode, buf);</div><div class='add'>+                                                inode, buf, preparent,</div><div class='add'>+                                                postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -6681,12 +6702,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> libgf_client_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='add'>+                         int32_t op_ret, int32_t op_errno,</div><div class='add'>+                         struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t    *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;reply_stub = fop_unlink_cbk_stub (frame, NULL, op_ret,</div><div class='del'>-                                                        op_errno);</div><div class='add'>+        local-&gt;reply_stub = fop_unlink_cbk_stub (frame, NULL, op_ret, op_errno,</div><div class='add'>+                                                 preparent, postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -6787,12 +6809,14 @@ out:</div><div class='ctx'> static int32_t</div><div class='ctx'> libgf_client_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                inode_t *inode, struct stat *buf)</div><div class='add'>+                                inode_t *inode, struct stat *buf,</div><div class='add'>+                                struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_symlink_cbk_stub (frame, NULL, op_ret,</div><div class='del'>-                                                  op_errno, inode, buf);</div><div class='add'>+                                                  op_errno, inode, buf,</div><div class='add'>+                                                  preparent, postparent);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -6928,12 +6952,12 @@ out:</div><div class='ctx'> int32_t</div><div class='ctx'> libgf_client_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                const char *path)</div><div class='add'>+                                const char *path, struct stat *sbuf)</div><div class='ctx'> {</div><div class='ctx'>         libgf_client_local_t    *local = frame-&gt;local;</div><div class='ctx'> </div><div class='ctx'>         local-&gt;reply_stub = fop_readlink_cbk_stub (frame, NULL, op_ret,</div><div class='del'>-                                                   op_errno, path);</div><div class='add'>+                                                   op_errno, path, sbuf);</div><div class='ctx'> </div><div class='ctx'>         LIBGF_REPLY_NOTIFY (local);</div><div class='ctx'>         return 0;</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 51629234f88..5cd05b13864 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-dir-write.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-dir-write.c</a></div><div class='hunk'>@@ -115,7 +115,8 @@ afr_create_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_create_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, </div><div class='ctx'> 		     int32_t op_ret, int32_t op_errno, </div><div class='del'>-		     fd_t *fd, inode_t *inode, struct stat *buf)</div><div class='add'>+		     fd_t *fd, inode_t *inode, struct stat *buf,</div><div class='add'>+                     struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -366,9 +367,10 @@ afr_mknod_unwind (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_mknod_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'>-		    inode_t *inode, struct stat *buf)</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 stat *buf, struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -601,9 +603,10 @@ afr_mkdir_unwind (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_mkdir_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'>-		    inode_t *inode, struct stat *buf)</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 stat *buf, struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -840,7 +843,8 @@ afr_link_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_link_wind_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='del'>-		   struct stat *buf)</div><div class='add'>+                   struct stat *buf, struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -1065,7 +1069,8 @@ afr_symlink_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_symlink_wind_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='del'>-		      struct stat *buf)</div><div class='add'>+                      struct stat *buf, struct stat *preparent,</div><div class='add'>+                      struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -1297,7 +1302,9 @@ afr_rename_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *buf)</div><div class='add'>+		     int32_t op_ret, int32_t op_errno, struct stat *buf,</div><div class='add'>+                     struct stat *preoldparent, struct stat *postoldparent,</div><div class='add'>+                     struct stat *prenewparent, struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -1496,7 +1503,8 @@ afr_unlink_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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)</div><div class='add'>+		     int32_t op_ret, int32_t op_errno, struct stat *preparent,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -1683,7 +1691,8 @@ afr_rmdir_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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)</div><div class='add'>+		    int32_t op_ret, int32_t op_errno, struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</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 2032065119a..8c0431f5a51 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-inode-read.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-inode-read.c</a></div><div class='hunk'>@@ -428,7 +428,7 @@ out:</div><div class='ctx'> int32_t</div><div class='ctx'> afr_readlink_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 		  xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-		  const char *buf)</div><div class='add'>+		  const char *buf, struct stat *sbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t * priv     = NULL;</div><div class='ctx'> 	afr_local_t *   local    = NULL;</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 591f7cd49aa..601913a0fca 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-inode-write.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-inode-write.c</a></div><div class='hunk'>@@ -88,7 +88,8 @@ afr_writev_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *buf)</div><div class='add'>+		     int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                     struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -115,11 +116,11 @@ afr_writev_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		if (op_ret != -1) {</div><div class='ctx'> 			if (local-&gt;success_count == 0) {</div><div class='ctx'> 				local-&gt;op_ret   = op_ret;</div><div class='del'>-				local-&gt;cont.writev.buf = *buf;</div><div class='add'>+				local-&gt;cont.writev.buf = *postbuf;</div><div class='ctx'> 			}</div><div class='ctx'> </div><div class='ctx'>                         if (child_index == read_child) {</div><div class='del'>-                                local-&gt;cont.writev.read_child_buf = *buf;</div><div class='add'>+                                local-&gt;cont.writev.read_child_buf = *postbuf;</div><div class='ctx'>                         }</div><div class='ctx'> </div><div class='ctx'> 			local-&gt;success_count++;</div><div class='hunk'>@@ -323,7 +324,8 @@ afr_truncate_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *buf)</div><div class='add'>+		       int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                       struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -350,11 +352,11 @@ afr_truncate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		if (op_ret != -1) {</div><div class='ctx'> 			if (local-&gt;success_count == 0) {</div><div class='ctx'> 				local-&gt;op_ret = op_ret;</div><div class='del'>-				local-&gt;cont.truncate.buf = *buf;</div><div class='add'>+				local-&gt;cont.truncate.buf = *postbuf;</div><div class='ctx'> 			}</div><div class='ctx'> </div><div class='ctx'>                         if (child_index == read_child) {</div><div class='del'>-                                local-&gt;cont.truncate.read_child_buf = *buf;</div><div class='add'>+                                local-&gt;cont.truncate.read_child_buf = *postbuf;</div><div class='ctx'>                         }</div><div class='ctx'> </div><div class='ctx'> 			local-&gt;success_count++;</div><div class='hunk'>@@ -543,7 +545,8 @@ afr_ftruncate_unwind (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *buf)</div><div class='add'>+			int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                        struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -570,11 +573,11 @@ afr_ftruncate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		if (op_ret != -1) {</div><div class='ctx'> 			if (local-&gt;success_count == 0) {</div><div class='ctx'> 				local-&gt;op_ret = op_ret;</div><div class='del'>-				local-&gt;cont.ftruncate.buf = *buf;</div><div class='add'>+				local-&gt;cont.ftruncate.buf = *postbuf;</div><div class='ctx'> 			}</div><div class='ctx'> </div><div class='ctx'>                         if (child_index == read_child) {</div><div class='del'>-                                local-&gt;cont.ftruncate.read_child_buf = *buf;</div><div class='add'>+                                local-&gt;cont.ftruncate.read_child_buf = *postbuf;</div><div class='ctx'>                         }</div><div class='ctx'> </div><div class='ctx'> 			local-&gt;success_count++;</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heal-algorithm.c b/xlators/cluster/afr/src/afr-self-heal-algorithm.c<br/>index 46d451913b0..5197f6be43f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-algorithm.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/afr/src/afr-self-heal-algorithm.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-algorithm.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-algorithm.c</a></div><div class='hunk'>@@ -55,7 +55,8 @@ sh_full_read_write_iter (call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> sh_full_write_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct stat *buf)</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                   struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t * priv = NULL;</div><div class='ctx'> 	afr_local_t * local  = NULL;</div><div class='hunk'>@@ -281,7 +282,8 @@ sh_diff_iter (call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> sh_diff_write_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct stat *buf)</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct stat *buf,</div><div class='add'>+                   struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t *   priv  = NULL;</div><div class='ctx'> 	afr_local_t *     local = NULL;</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 4a260ed903e..ef25204a11a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-common.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-common.c</a></div><div class='hunk'>@@ -831,7 +831,9 @@ static int</div><div class='ctx'> sh_missing_entries_newentry_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 				 xlator_t *this,</div><div class='ctx'> 				 int32_t op_ret, int32_t op_errno,</div><div class='del'>-				 inode_t *inode, struct stat *buf)</div><div class='add'>+				 inode_t *inode, struct stat *buf,</div><div class='add'>+                                 struct stat *preparent,</div><div class='add'>+                                 struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t     *local = NULL;</div><div class='ctx'> 	afr_self_heal_t *sh = NULL;</div><div class='hunk'>@@ -1044,7 +1046,7 @@ static int</div><div class='ctx'> sh_missing_entries_readlink_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 				 xlator_t *this,</div><div class='ctx'> 				 int32_t op_ret, int32_t op_errno,</div><div class='del'>-				 const char *link)</div><div class='add'>+				 const char *link, struct stat *sbuf)</div><div class='ctx'> {</div><div class='ctx'> 	if (op_ret &gt; 0)</div><div class='ctx'> 		sh_missing_entries_symlink (frame, this, link);</div><div class='hunk'>@@ -1164,7 +1166,8 @@ static int</div><div class='ctx'> sh_missing_entries_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 			       xlator_t *this,</div><div class='ctx'> 			       int32_t op_ret, int32_t op_errno,</div><div class='del'>-			       inode_t *inode, struct stat *buf, dict_t *xattr)</div><div class='add'>+                               inode_t *inode, struct stat *buf, dict_t *xattr,</div><div class='add'>+                               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int              child_index = 0;</div><div class='ctx'> 	afr_local_t     *local = NULL;</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 576a15e06f2..5300f0a7528 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-data.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-data.c</a></div><div class='hunk'>@@ -395,7 +395,8 @@ afr_sh_data_erase_pending (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> afr_sh_data_trim_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		      int32_t op_ret, int32_t op_errno, struct stat *buf)</div><div class='add'>+		      int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                      struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t * priv = NULL;</div><div class='ctx'> 	afr_local_t * local  = NULL;</div><div class='hunk'>@@ -600,7 +601,7 @@ afr_sh_data_open (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> 			   (void *) (long) source,</div><div class='ctx'> 			   priv-&gt;children[source],</div><div class='ctx'> 			   priv-&gt;children[source]-&gt;fops-&gt;open,</div><div class='del'>-			   &amp;local-&gt;loc, O_RDWR|O_LARGEFILE, fd);</div><div class='add'>+			   &amp;local-&gt;loc, O_RDWR|O_LARGEFILE, fd, 0);</div><div class='ctx'> 	call_count--;</div><div class='ctx'> </div><div class='ctx'> 	/* open sinks */</div><div class='hunk'>@@ -613,7 +614,7 @@ afr_sh_data_open (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> 				   priv-&gt;children[i], </div><div class='ctx'> 				   priv-&gt;children[i]-&gt;fops-&gt;open,</div><div class='ctx'> 				   &amp;local-&gt;loc, </div><div class='del'>-				   O_RDWR|O_LARGEFILE, fd); </div><div class='add'>+				   O_RDWR|O_LARGEFILE, fd, 0); </div><div class='ctx'> </div><div class='ctx'> 		if (!--call_count)</div><div class='ctx'> 			break;</div><div class='hunk'>@@ -758,7 +759,8 @@ afr_sh_data_fix (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_sh_data_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 			xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-			inode_t *inode, struct stat *buf, dict_t *xattr)</div><div class='add'>+                        inode_t *inode, struct stat *buf, dict_t *xattr,</div><div class='add'>+                        struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv  = NULL;</div><div class='ctx'> 	afr_local_t     *local = NULL;</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 b3bb6720917..fa938415864 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-entry.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-entry.c</a></div><div class='hunk'>@@ -426,7 +426,9 @@ afr_sh_entry_expunge_entry_done (call_frame_t *frame, xlator_t *this,</div><div class='ctx'> int</div><div class='ctx'> afr_sh_entry_expunge_remove_cbk (call_frame_t *expunge_frame, void *cookie,</div><div class='ctx'> 				 xlator_t *this,</div><div class='del'>-				 int32_t op_ret, int32_t op_errno)</div><div class='add'>+				 int32_t op_ret, int32_t op_errno,</div><div class='add'>+                                 struct stat *preparent,</div><div class='add'>+                                 struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='ctx'> 	afr_local_t     *expunge_local = NULL;</div><div class='hunk'>@@ -564,7 +566,8 @@ int</div><div class='ctx'> afr_sh_entry_expunge_lookup_cbk (call_frame_t *expunge_frame, void *cookie,</div><div class='ctx'> 				xlator_t *this,</div><div class='ctx'> 				int32_t op_ret,	int32_t op_errno,</div><div class='del'>-				inode_t *inode, struct stat *buf, dict_t *x)</div><div class='add'>+                                inode_t *inode, struct stat *buf, dict_t *x,</div><div class='add'>+                                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='ctx'> 	afr_local_t     *expunge_local = NULL;</div><div class='hunk'>@@ -626,7 +629,8 @@ int</div><div class='ctx'> afr_sh_entry_expunge_entry_cbk (call_frame_t *expunge_frame, void *cookie,</div><div class='ctx'> 				xlator_t *this,</div><div class='ctx'> 				int32_t op_ret,	int32_t op_errno,</div><div class='del'>-				inode_t *inode, struct stat *buf, dict_t *x)</div><div class='add'>+                                inode_t *inode, struct stat *buf, dict_t *x,</div><div class='add'>+                                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='ctx'> 	afr_local_t     *expunge_local = NULL;</div><div class='hunk'>@@ -1021,7 +1025,9 @@ int</div><div class='ctx'> afr_sh_entry_impunge_newfile_cbk (call_frame_t *impunge_frame, void *cookie,</div><div class='ctx'> 				  xlator_t *this,</div><div class='ctx'> 				  int32_t op_ret, int32_t op_errno,</div><div class='del'>-				  inode_t *inode, struct stat *stbuf)</div><div class='add'>+                                  inode_t *inode, struct stat *stbuf,</div><div class='add'>+                                  struct stat *preparent,</div><div class='add'>+                                  struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int              call_count = 0;</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='hunk'>@@ -1188,7 +1194,7 @@ int</div><div class='ctx'> afr_sh_entry_impunge_readlink_cbk (call_frame_t *impunge_frame, void *cookie,</div><div class='ctx'> 				   xlator_t *this,</div><div class='ctx'> 				   int32_t op_ret, int32_t op_errno,</div><div class='del'>-				   const char *linkname)</div><div class='add'>+				   const char *linkname, struct stat *sbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='ctx'> 	afr_local_t     *impunge_local = NULL;</div><div class='hunk'>@@ -1264,7 +1270,7 @@ afr_sh_entry_impunge_recreate_lookup_cbk (call_frame_t *impunge_frame,</div><div class='ctx'> 					  void *cookie, xlator_t *this,</div><div class='ctx'> 					  int32_t op_ret, int32_t op_errno,</div><div class='ctx'> 					  inode_t *inode, struct stat *buf,</div><div class='del'>-					  dict_t *xattr)</div><div class='add'>+					  dict_t *xattr,struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='ctx'> 	afr_local_t     *impunge_local = NULL;</div><div class='hunk'>@@ -1372,7 +1378,8 @@ int</div><div class='ctx'> afr_sh_entry_impunge_entry_cbk (call_frame_t *impunge_frame, void *cookie,</div><div class='ctx'> 				xlator_t *this,</div><div class='ctx'> 				int32_t op_ret,	int32_t op_errno,</div><div class='del'>-				inode_t *inode, struct stat *buf, dict_t *x)</div><div class='add'>+                                inode_t *inode, struct stat *buf, dict_t *x,</div><div class='add'>+                                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv = NULL;</div><div class='ctx'> 	afr_local_t     *impunge_local = NULL;</div><div class='hunk'>@@ -1861,7 +1868,8 @@ afr_sh_entry_fix (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_sh_entry_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 			 xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-			 inode_t *inode, struct stat *buf, dict_t *xattr)</div><div class='add'>+                         inode_t *inode, struct stat *buf, dict_t *xattr,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t   *priv  = NULL;</div><div class='ctx'> 	afr_local_t     *local = NULL;</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 686446b5f30..9a02ab6ddb3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-metadata.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>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=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr-self-heal-metadata.c</a></div><div class='hunk'>@@ -591,7 +591,8 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_sh_metadata_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 			    int32_t op_ret, int32_t op_errno,</div><div class='del'>-			    inode_t *inode, struct stat *buf, dict_t *xattr)</div><div class='add'>+                            inode_t *inode, struct stat *buf, dict_t *xattr,</div><div class='add'>+                            struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t     *local = NULL;</div><div class='ctx'> 	afr_self_heal_t *sh = NULL;</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c<br/>index ef93e5078a2..b65a4dc466d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/afr/src/afr.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/afr/src/afr.c</a></div><div class='hunk'>@@ -448,7 +448,8 @@ afr_self_heal_cbk (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> int</div><div class='ctx'> afr_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 		xlator_t *this,	int32_t op_ret,	int32_t op_errno,</div><div class='del'>-		inode_t *inode,	struct stat *buf, dict_t *xattr)</div><div class='add'>+                inode_t *inode,	struct stat *buf, dict_t *xattr,</div><div class='add'>+                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='hunk'>@@ -789,7 +790,8 @@ out:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *buf)</div><div class='add'>+			int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                        struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t * local = frame-&gt;local;</div><div class='ctx'>         int ret = 0;</div><div class='hunk'>@@ -864,8 +866,8 @@ afr_open_cbk (call_frame_t *frame, void *cookie,</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,</div><div class='del'>-	  loc_t *loc, int32_t flags, fd_t *fd)</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, int32_t wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	afr_private_t * priv  = NULL;</div><div class='ctx'> 	afr_local_t *   local = NULL;</div><div class='hunk'>@@ -910,7 +912,7 @@ afr_open (call_frame_t *frame, xlator_t *this,</div><div class='ctx'> 			STACK_WIND_COOKIE (frame, afr_open_cbk, (void *) (long) i,</div><div class='ctx'> 					   priv-&gt;children[i],</div><div class='ctx'> 					   priv-&gt;children[i]-&gt;fops-&gt;open,</div><div class='del'>-					   loc, wind_flags, fd);</div><div class='add'>+					   loc, wind_flags, fd, wbflags);</div><div class='ctx'> 			</div><div class='ctx'> 			if (!--call_count)</div><div class='ctx'> 				break;</div><div class='hunk'>@@ -1152,8 +1154,9 @@ out:</div><div class='ctx'> /* {{{ fsync */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fsync_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='add'>+afr_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+               struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	afr_local_t *local = NULL;</div><div class='ctx'> 	</div><div class='hunk'>@@ -1294,7 +1297,7 @@ afr_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'> </div><div class='ctx'> 	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='ctx'> 		if (local-&gt;child_up[i]) {</div><div class='del'>-			STACK_WIND (frame, afr_fsync_cbk,</div><div class='add'>+			STACK_WIND (frame, afr_fsyncdir_cbk,</div><div class='ctx'> 				    priv-&gt;children[i],</div><div class='ctx'> 				    priv-&gt;children[i]-&gt;fops-&gt;fsyncdir,</div><div class='ctx'> 				    fd, datasync);</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c<br/>index d5d6f4c3e2f..49af12101b7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-common.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/dht/src/dht-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-common.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-common.c</a></div><div class='hunk'>@@ -79,7 +79,8 @@ dht_lookup_selfheal_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> int</div><div class='ctx'> dht_lookup_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                     int op_ret, int op_errno,</div><div class='del'>-                    inode_t *inode, struct stat *stbuf, dict_t *xattr)</div><div class='add'>+                    inode_t *inode, struct stat *stbuf, dict_t *xattr,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_conf_t   *conf          = NULL;</div><div class='ctx'>         dht_local_t  *local         = NULL;</div><div class='hunk'>@@ -190,7 +191,8 @@ selfheal:</div><div class='ctx'> int</div><div class='ctx'> dht_revalidate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                     int op_ret, int op_errno,</div><div class='del'>-                    inode_t *inode, struct stat *stbuf, dict_t *xattr)</div><div class='add'>+                    inode_t *inode, struct stat *stbuf, dict_t *xattr,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         dht_local_t  *local         = NULL;</div><div class='ctx'>         int           this_call_cnt = 0;</div><div class='hunk'>@@ -308,7 +310,8 @@ int</div><div class='ctx'> dht_lookup_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 				xlator_t *this,</div><div class='ctx'> 				int32_t op_ret, int32_t op_errno,</div><div class='del'>-				inode_t *inode, struct stat *stbuf)</div><div class='add'>+                                inode_t *inode, struct stat *stbuf,</div><div class='add'>+                                struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	xlator_t     *cached_subvol = NULL;</div><div class='hunk'>@@ -345,7 +348,8 @@ unwind:</div><div class='ctx'> int</div><div class='ctx'> dht_lookup_everywhere_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 			   int32_t op_ret, int32_t op_errno,</div><div class='del'>-			   inode_t *inode, struct stat *buf, dict_t *xattr)</div><div class='add'>+                           inode_t *inode, struct stat *buf, dict_t *xattr,</div><div class='add'>+                           struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_conf_t   *conf          = NULL;</div><div class='ctx'>         dht_local_t  *local         = NULL;</div><div class='hunk'>@@ -521,7 +525,8 @@ dht_lookup_everywhere (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> int</div><div class='ctx'> dht_lookup_linkfile_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'>                          xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                         inode_t *inode, struct stat *stbuf, dict_t *xattr)</div><div class='add'>+                         inode_t *inode, struct stat *stbuf, dict_t *xattr,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='hunk'>@@ -622,7 +627,8 @@ dht_lookup_directory (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> int</div><div class='ctx'> dht_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                 int op_ret, int op_errno,</div><div class='del'>-                inode_t *inode, struct stat *stbuf, dict_t *xattr)</div><div class='add'>+                inode_t *inode, struct stat *stbuf, dict_t *xattr,</div><div class='add'>+                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_layout_t *layout      = NULL;</div><div class='ctx'>         char          is_linkfile = 0;</div><div class='hunk'>@@ -853,6 +859,48 @@ err:</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'> int</div><div class='add'>+dht_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+	      int op_ret, int op_errno, struct stat *prebuf,</div><div class='add'>+              struct stat *postbuf)</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'>+	call_frame_t *prev = NULL;</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'>+		if (op_ret == -1) {</div><div class='add'>+			local-&gt;op_errno = op_errno;</div><div class='add'>+			gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+				"subvolume %s returned -1 (%s)",</div><div class='add'>+				prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='add'>+			goto unlock;</div><div class='add'>+		}</div><div class='add'>+</div><div class='add'>+		dht_stat_merge (this, &amp;local-&gt;stbuf, prebuf, prev-&gt;this);</div><div class='add'>+</div><div class='add'>+		if (local-&gt;inode)</div><div class='add'>+			local-&gt;stbuf.st_ino = local-&gt;inode-&gt;ino;</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 (frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+				  &amp;local-&gt;stbuf);</div><div class='add'>+</div><div class='add'>+        return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+int</div><div class='ctx'> dht_attr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 	      int op_ret, int op_errno, struct stat *stbuf)</div><div class='ctx'> {</div><div class='hunk'>@@ -1031,7 +1079,7 @@ dht_truncate (call_frame_t *frame, xlator_t *this,</div><div class='ctx'> 	local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='ctx'> 	local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND (frame, dht_attr_cbk,</div><div class='add'>+	STACK_WIND (frame, dht_truncate_cbk,</div><div class='ctx'> 		    subvol, subvol-&gt;fops-&gt;truncate,</div><div class='ctx'> 		    loc, offset);</div><div class='ctx'> </div><div class='hunk'>@@ -1077,7 +1125,7 @@ dht_ftruncate (call_frame_t *frame, xlator_t *this,</div><div class='ctx'> 	local-&gt;inode = inode_ref (fd-&gt;inode);</div><div class='ctx'> 	local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND (frame, dht_attr_cbk,</div><div class='add'>+	STACK_WIND (frame, dht_truncate_cbk,</div><div class='ctx'> 		    subvol, subvol-&gt;fops-&gt;ftruncate,</div><div class='ctx'> 		    fd, offset);</div><div class='ctx'> </div><div class='hunk'>@@ -1092,6 +1140,78 @@ err:</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'> int</div><div class='add'>+dht_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int op_ret, int op_errno, struct stat *preparent,</div><div class='add'>+                struct stat *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'>+	call_frame_t *prev = NULL;</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'>+		if (op_ret == -1) {</div><div class='add'>+			local-&gt;op_errno = op_errno;</div><div class='add'>+			gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+				"subvolume %s returned -1 (%s)",</div><div class='add'>+				prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='add'>+			goto unlock;</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'>+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 (frame, local-&gt;op_ret, local-&gt;op_errno);</div><div class='add'>+</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_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, struct stat *prebuf, struct stat *postbuf)</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'>+	call_frame_t *prev = NULL;</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'>+		if (op_ret == -1) {</div><div class='add'>+			local-&gt;op_errno = op_errno;</div><div class='add'>+			gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+				"subvolume %s returned -1 (%s)",</div><div class='add'>+				prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='add'>+			goto unlock;</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'>+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 (frame, local-&gt;op_ret, local-&gt;op_errno);</div><div class='add'>+</div><div class='add'>+        return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+int</div><div class='ctx'> dht_err_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 	     int op_ret, int op_errno)</div><div class='ctx'> {</div><div class='hunk'>@@ -1175,9 +1295,9 @@ err:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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='add'>+		  int op_ret, int op_errno, const char *path, struct stat *sbuf)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (frame, op_ret, op_errno, path);</div><div class='add'>+        DHT_STACK_UNWIND (frame, op_ret, op_errno, path, sbuf);</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -1397,7 +1517,7 @@ unlock:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> dht_open (call_frame_t *frame, xlator_t *this,</div><div class='del'>-	  loc_t *loc, int flags, fd_t *fd)</div><div class='add'>+	  loc_t *loc, int flags, fd_t *fd, int wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	xlator_t     *subvol = NULL;</div><div class='ctx'> 	int           ret = -1;</div><div class='hunk'>@@ -1438,7 +1558,7 @@ dht_open (call_frame_t *frame, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'> 	STACK_WIND (frame, dht_fd_cbk,</div><div class='ctx'> 		    subvol, subvol-&gt;fops-&gt;open,</div><div class='del'>-		    loc, flags, fd);</div><div class='add'>+		    loc, flags, fd, wbflags);</div><div class='ctx'> </div><div class='ctx'> 	return 0;</div><div class='ctx'> </div><div class='hunk'>@@ -1499,9 +1619,10 @@ err:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		int op_ret, int op_errno, struct stat *stbuf)</div><div class='add'>+		int op_ret, int op_errno, struct stat *prebuf,</div><div class='add'>+                struct stat *postbuf)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (frame, op_ret, op_errno, stbuf);</div><div class='add'>+        DHT_STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf);</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -1616,7 +1737,7 @@ dht_fsync (call_frame_t *frame, xlator_t *this,</div><div class='ctx'> 	}</div><div class='ctx'> 	local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND (frame, dht_err_cbk,</div><div class='add'>+	STACK_WIND (frame, dht_fsync_cbk,</div><div class='ctx'> 		    subvol, subvol-&gt;fops-&gt;fsync,</div><div class='ctx'> 		    fd, datasync);</div><div class='ctx'> </div><div class='hunk'>@@ -2010,7 +2131,8 @@ err:</div><div class='ctx'> int</div><div class='ctx'> dht_newfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		 int op_ret, int op_errno,</div><div class='del'>-		 inode_t *inode, struct stat *stbuf)</div><div class='add'>+                 inode_t *inode, struct stat *stbuf, struct stat *preparent,</div><div class='add'>+                 struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_frame_t *prev = NULL;</div><div class='ctx'> 	dht_layout_t *layout = NULL;</div><div class='hunk'>@@ -2052,7 +2174,8 @@ int</div><div class='ctx'> dht_mknod_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'>                                xlator_t *this,</div><div class='ctx'>                                int32_t op_ret, int32_t op_errno,</div><div class='del'>-                               inode_t *inode, struct stat *stbuf)</div><div class='add'>+                               inode_t *inode, struct stat *stbuf,</div><div class='add'>+                               struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	xlator_t     *cached_subvol = NULL;</div><div class='hunk'>@@ -2235,11 +2358,11 @@ dht_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> 	if (hashed_subvol != cached_subvol)</div><div class='ctx'> 		local-&gt;call_cnt++;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND (frame, dht_err_cbk,</div><div class='add'>+	STACK_WIND (frame, dht_unlink_cbk,</div><div class='ctx'> 		    cached_subvol, cached_subvol-&gt;fops-&gt;unlink, loc);</div><div class='ctx'> </div><div class='ctx'> 	if (hashed_subvol != cached_subvol)</div><div class='del'>-		STACK_WIND (frame, dht_err_cbk,</div><div class='add'>+		STACK_WIND (frame, dht_unlink_cbk,</div><div class='ctx'> 			    hashed_subvol, hashed_subvol-&gt;fops-&gt;unlink, loc);</div><div class='ctx'> </div><div class='ctx'> 	return 0;</div><div class='hunk'>@@ -2255,7 +2378,8 @@ err:</div><div class='ctx'> int</div><div class='ctx'> dht_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 	      int op_ret, int op_errno,</div><div class='del'>-	      inode_t *inode, struct stat *stbuf)</div><div class='add'>+              inode_t *inode, struct stat *stbuf, struct stat *preparent,</div><div class='add'>+              struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'> 	dht_layout_t *layout = NULL;</div><div class='hunk'>@@ -2289,7 +2413,8 @@ out:</div><div class='ctx'> int</div><div class='ctx'> dht_link_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		       int op_ret, int op_errno,</div><div class='del'>-		       inode_t *inode, struct stat *stbuf)</div><div class='add'>+                       inode_t *inode, struct stat *stbuf,</div><div class='add'>+                       struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	xlator_t     *srcvol = NULL;</div><div class='hunk'>@@ -2393,7 +2518,8 @@ err:</div><div class='ctx'> int</div><div class='ctx'> dht_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		 int op_ret, int op_errno,</div><div class='del'>-		 fd_t *fd, inode_t *inode, struct stat *stbuf)</div><div class='add'>+		 fd_t *fd, inode_t *inode, struct stat *stbuf,</div><div class='add'>+                 struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	call_frame_t *prev = NULL;</div><div class='ctx'> 	dht_layout_t *layout = NULL;</div><div class='hunk'>@@ -2435,7 +2561,8 @@ int</div><div class='ctx'> dht_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> 				xlator_t *this,</div><div class='ctx'> 				int32_t op_ret, int32_t op_errno,</div><div class='del'>-				inode_t *inode, struct stat *stbuf)</div><div class='add'>+                                inode_t *inode, struct stat *stbuf,</div><div class='add'>+                                struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	xlator_t     *cached_subvol = NULL;</div><div class='hunk'>@@ -2570,7 +2697,8 @@ dht_mkdir_selfheal_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *stbuf)</div><div class='add'>+               int op_ret, int op_errno, inode_t *inode, struct stat *stbuf,</div><div class='add'>+               struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	int           this_call_cnt = 0;</div><div class='hunk'>@@ -2618,8 +2746,9 @@ unlock:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *stbuf)</div><div class='add'>+		      xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                      inode_t *inode, struct stat *stbuf,</div><div class='add'>+                      struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	int           ret = -1;</div><div class='hunk'>@@ -2764,7 +2893,8 @@ dht_rmdir_selfheal_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> dht_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-	       int op_ret, int op_errno)</div><div class='add'>+	       int op_ret, int op_errno, struct stat *preparent,</div><div class='add'>+               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	uint64_t      tmp_layout = 0;</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-linkfile.c b/xlators/cluster/dht/src/dht-linkfile.c<br/>index 213d3f2bf72..d28f7beca09 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-linkfile.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/dht/src/dht-linkfile.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-linkfile.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-linkfile.c</a></div><div class='hunk'>@@ -40,7 +40,7 @@ dht_linkfile_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 	local = frame-&gt;local;</div><div class='ctx'> 	local-&gt;linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='ctx'> 				      local-&gt;linkfile.inode,</div><div class='del'>-				      &amp;local-&gt;linkfile.stbuf);</div><div class='add'>+				      &amp;local-&gt;linkfile.stbuf, NULL, NULL);</div><div class='ctx'> </div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -48,8 +48,9 @@ dht_linkfile_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> dht_linkfile_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'>-			 inode_t *inode, struct stat *stbuf)</div><div class='add'>+                         int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                         struct stat *stbuf, struct stat *preparent,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	call_frame_t *prev = NULL;</div><div class='hunk'>@@ -104,8 +105,8 @@ err:</div><div class='ctx'> 		str_data = NULL;</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='del'>-	local-&gt;linkfile.linkfile_cbk (frame, cookie, this,</div><div class='del'>-				      op_ret, op_errno, inode, stbuf);</div><div class='add'>+        local-&gt;linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='add'>+                                      inode, stbuf, preparent, postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -132,7 +133,8 @@ dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk,</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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='add'>+			 int32_t op_ret, int32_t op_errno,</div><div class='add'>+                         struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t   *local = NULL;</div><div class='ctx'> 	call_frame_t  *prev = NULL;</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-rename.c b/xlators/cluster/dht/src/dht-rename.c<br/>index 6c34dabad1e..f91d1983d69 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-rename.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/dht/src/dht-rename.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-rename.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-rename.c</a></div><div class='hunk'>@@ -33,7 +33,9 @@</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *stbuf)</div><div class='add'>+		    int32_t op_ret, int32_t op_errno, struct stat *stbuf,</div><div class='add'>+                    struct stat *preoldparent, struct stat *postoldparent,</div><div class='add'>+                    struct stat *prenewparent, struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	int           this_call_cnt = 0;</div><div class='hunk'>@@ -213,7 +215,8 @@ err:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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)</div><div class='add'>+		       int32_t op_ret, int32_t op_errno, struct stat *preparent,</div><div class='add'>+                       struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	call_frame_t *prev = NULL;</div><div class='hunk'>@@ -240,7 +243,9 @@ dht_rename_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> 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 stat *stbuf)</div><div class='add'>+		int32_t op_ret, int32_t op_errno, struct stat *stbuf,</div><div class='add'>+                struct stat *preoldparent, struct stat *postoldparent,</div><div class='add'>+                struct stat *prenewparent, struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	call_frame_t *prev = NULL;</div><div class='hunk'>@@ -369,7 +374,8 @@ dht_do_rename (call_frame_t *frame)</div><div class='ctx'> int</div><div class='ctx'> dht_rename_links_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		      int32_t op_ret, int32_t op_errno,</div><div class='del'>-		      inode_t *inode, struct stat *stbuf)</div><div class='add'>+                      inode_t *inode, struct stat *stbuf,</div><div class='add'>+                      struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t  *local = NULL;</div><div class='ctx'> 	call_frame_t *prev = NULL;</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c<br/>index df8b2047b2b..d3b36363ee3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-selfheal.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/dht/src/dht-selfheal.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-selfheal.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/dht-selfheal.c</a></div><div class='hunk'>@@ -196,7 +196,8 @@ dht_selfheal_dir_xattr (call_frame_t *frame, loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> int</div><div class='ctx'> dht_selfheal_dir_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 			    int op_ret, int op_errno,</div><div class='del'>-			    inode_t *inode, struct stat *stbuf)</div><div class='add'>+                            inode_t *inode, struct stat *stbuf,</div><div class='add'>+                            struct stat *preparent, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_local_t   *local = NULL;</div><div class='ctx'> 	dht_layout_t  *layout = NULL;</div><div class='head'>diff --git a/xlators/cluster/dht/src/nufa.c b/xlators/cluster/dht/src/nufa.c<br/>index 6be7206bfb5..17516a122c3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/nufa.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/dht/src/nufa.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/nufa.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/dht/src/nufa.c</a></div><div class='hunk'>@@ -30,7 +30,8 @@</div><div class='ctx'> int </div><div class='ctx'> nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> 		       int op_ret, int op_errno,</div><div class='del'>-		       inode_t *inode, struct stat *stbuf, dict_t *xattr)</div><div class='add'>+                       inode_t *inode, struct stat *stbuf, dict_t *xattr,</div><div class='add'>+                       struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	dht_layout_t *layout      = NULL;</div><div class='ctx'>         xlator_t     *subvol      = NULL;</div><div class='hunk'>@@ -268,7 +269,9 @@ err:</div><div class='ctx'> int</div><div class='ctx'> nufa_create_linkfile_create_cbk (call_frame_t *frame, void *cookie, </div><div class='ctx'> 				 xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-				 inode_t *inode, struct stat *stbuf)</div><div class='add'>+                                 inode_t *inode, struct stat *stbuf,</div><div class='add'>+                                 struct stat *preparent,</div><div class='add'>+                                 struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>  	dht_local_t  *local = NULL;</div><div class='ctx'>  	call_frame_t *prev = NULL;</div><div class='hunk'>@@ -374,8 +377,9 @@ err:</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> nufa_mknod_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 stat *stbuf)</div><div class='add'>+                         int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                         struct stat *stbuf, struct stat *preparent,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>  	dht_local_t  *local = NULL;</div><div class='ctx'>  	call_frame_t *prev = NULL;</div><div class='head'>diff --git a/xlators/cluster/ha/src/ha.c b/xlators/cluster/ha/src/ha.c<br/>index b380cb1e9a7..b2ca48b1089 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ha/src/ha.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/ha/src/ha.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ha/src/ha.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/ha/src/ha.c</a></div><div class='hunk'>@@ -64,7 +64,8 @@ ha_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 	       int32_t op_errno,</div><div class='ctx'> 	       inode_t *inode,</div><div class='ctx'> 	       struct stat *buf,</div><div class='del'>-	       dict_t *dict)</div><div class='add'>+               dict_t *dict,</div><div class='add'>+               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -307,7 +308,8 @@ ha_truncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		 xlator_t *this,</div><div class='ctx'> 		 int32_t op_ret,</div><div class='ctx'> 		 int32_t op_errno,</div><div class='del'>-		 struct stat *buf)</div><div class='add'>+		 struct stat *prebuf,</div><div class='add'>+                 struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -316,7 +318,8 @@ ha_truncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		STACK_UNWIND (frame,</div><div class='ctx'> 			      op_ret,</div><div class='ctx'> 			      op_errno,</div><div class='del'>-			      buf);</div><div class='add'>+			      prebuf,</div><div class='add'>+                              postbuf);</div><div class='ctx'> 	}</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -357,7 +360,8 @@ ha_ftruncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		  xlator_t *this,</div><div class='ctx'> 		  int32_t op_ret,</div><div class='ctx'> 		  int32_t op_errno,</div><div class='del'>-		  struct stat *buf)</div><div class='add'>+		  struct stat *prebuf,</div><div class='add'>+                  struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -367,7 +371,7 @@ ha_ftruncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		STACK_UNWIND (frame,</div><div class='ctx'> 			      op_ret,</div><div class='ctx'> 			      op_errno,</div><div class='del'>-			      buf);</div><div class='add'>+			      prebuf, postbuf);</div><div class='ctx'> 	}</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -458,7 +462,8 @@ ha_readlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		 xlator_t *this,</div><div class='ctx'> 		 int32_t op_ret,</div><div class='ctx'> 		 int32_t op_errno,</div><div class='del'>-		 const char *path)</div><div class='add'>+		 const char *path,</div><div class='add'>+                 struct stat *sbuf)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -468,7 +473,8 @@ ha_readlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		STACK_UNWIND (frame,</div><div class='ctx'> 			      op_ret,</div><div class='ctx'> 			      op_errno,</div><div class='del'>-			      path);</div><div class='add'>+			      path,</div><div class='add'>+                              sbuf);</div><div class='ctx'> 	}</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -511,7 +517,8 @@ ha_mknod_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     inode_t *inode,</div><div class='ctx'> 		     struct stat *buf,</div><div class='del'>-		     dict_t *dict)</div><div class='add'>+                     dict_t *dict,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -573,7 +580,9 @@ ha_mknod_cbk (call_frame_t *frame,</div><div class='ctx'> 	      int32_t op_ret,</div><div class='ctx'> 	      int32_t op_errno,</div><div class='ctx'> 	      inode_t *inode,</div><div class='del'>-	      struct stat *buf)</div><div class='add'>+              struct stat *buf,</div><div class='add'>+              struct stat *preparent,</div><div class='add'>+              struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -708,7 +717,8 @@ ha_mkdir_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		     int32_t op_errno,</div><div class='ctx'> 		     inode_t *inode,</div><div class='ctx'> 		     struct stat *buf,</div><div class='del'>-		     dict_t *dict)</div><div class='add'>+                     dict_t *dict,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -762,7 +772,9 @@ ha_mkdir_cbk (call_frame_t *frame,</div><div class='ctx'> 	      int32_t op_ret,</div><div class='ctx'> 	      int32_t op_errno,</div><div class='ctx'> 	      inode_t *inode,</div><div class='del'>-	      struct stat *buf)</div><div class='add'>+              struct stat *buf,</div><div class='add'>+              struct stat *preparent,</div><div class='add'>+              struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -886,7 +898,9 @@ ha_unlink_cbk (call_frame_t *frame,</div><div class='ctx'> 	       void *cookie,</div><div class='ctx'> 	       xlator_t *this,</div><div class='ctx'> 	       int32_t op_ret,</div><div class='del'>-	       int32_t op_errno)</div><div class='add'>+	       int32_t op_errno,</div><div class='add'>+               struct stat *preparent,</div><div class='add'>+               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -931,7 +945,9 @@ ha_rmdir_cbk (call_frame_t *frame,</div><div class='ctx'> 	      void *cookie,</div><div class='ctx'> 	      xlator_t *this,</div><div class='ctx'> 	      int32_t op_ret,</div><div class='del'>-	      int32_t op_errno)</div><div class='add'>+	      int32_t op_errno,</div><div class='add'>+              struct stat *preparent,</div><div class='add'>+              struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -982,7 +998,8 @@ ha_symlink_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='ctx'> 		       inode_t *inode,</div><div class='ctx'> 		       struct stat *buf,</div><div class='del'>-		       dict_t *dict)</div><div class='add'>+                       dict_t *dict,</div><div class='add'>+                       struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -1036,7 +1053,9 @@ ha_symlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		int32_t op_ret,</div><div class='ctx'> 		int32_t op_errno,</div><div class='ctx'> 		inode_t *inode,</div><div class='del'>-		struct stat *buf)</div><div class='add'>+                struct stat *buf,</div><div class='add'>+                struct stat *preparent,</div><div class='add'>+                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -1163,7 +1182,11 @@ ha_rename_cbk (call_frame_t *frame,</div><div class='ctx'> 	       xlator_t *this,</div><div class='ctx'> 	       int32_t op_ret,</div><div class='ctx'> 	       int32_t op_errno,</div><div class='del'>-	       struct stat *buf)</div><div class='add'>+	       struct stat *buf,</div><div class='add'>+               struct stat *preoldparent,</div><div class='add'>+               struct stat *postoldparent,</div><div class='add'>+               struct stat *prenewparent,</div><div class='add'>+               struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -1211,7 +1234,8 @@ ha_link_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='ctx'> 		    struct stat *buf,</div><div class='del'>-		    dict_t *dict)</div><div class='add'>+                    dict_t *dict,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -1265,7 +1289,9 @@ ha_link_cbk (call_frame_t *frame,</div><div class='ctx'> 	     int32_t op_ret,</div><div class='ctx'> 	     int32_t op_errno,</div><div class='ctx'> 	     inode_t *inode,</div><div class='del'>-	     struct stat *buf)</div><div class='add'>+             struct stat *buf,</div><div class='add'>+             struct stat *preparent,</div><div class='add'>+             struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -1405,7 +1431,9 @@ ha_create_cbk (call_frame_t *frame,</div><div class='ctx'> 	       int32_t op_errno,</div><div class='ctx'> 	       fd_t *fd,</div><div class='ctx'> 	       inode_t *inode,</div><div class='del'>-	       struct stat *buf)</div><div class='add'>+	       struct stat *buf,</div><div class='add'>+               struct stat *preparent,</div><div class='add'>+               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -1602,7 +1630,7 @@ int32_t</div><div class='ctx'> ha_open (call_frame_t *frame,</div><div class='ctx'> 	 xlator_t *this,</div><div class='ctx'> 	 loc_t *loc,</div><div class='del'>-	 int32_t flags, fd_t *fd)</div><div class='add'>+	 int32_t flags, fd_t *fd, int wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	ha_local_t *local = NULL;</div><div class='ctx'> 	ha_private_t *pvt = NULL;</div><div class='hunk'>@@ -1646,7 +1674,7 @@ ha_open (call_frame_t *frame,</div><div class='ctx'> 				    ha_open_cbk,</div><div class='ctx'> 				    children[i],</div><div class='ctx'> 				    children[i]-&gt;fops-&gt;open,</div><div class='del'>-				    loc, flags, fd);</div><div class='add'>+				    loc, flags, fd, wbflags);</div><div class='ctx'> 			if (--cnt == 0)</div><div class='ctx'> 				break;</div><div class='ctx'> 		}</div><div class='hunk'>@@ -1719,7 +1747,8 @@ ha_writev_cbk (call_frame_t *frame,</div><div class='ctx'> 	       xlator_t *this,</div><div class='ctx'> 	       int32_t op_ret,</div><div class='ctx'> 	       int32_t op_errno,</div><div class='del'>-	       struct stat *stbuf)</div><div class='add'>+               struct stat *prebuf,</div><div class='add'>+	       struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = 0;</div><div class='ctx'> 	ret = ha_handle_cbk (frame, cookie, op_ret, op_errno);</div><div class='hunk'>@@ -1728,7 +1757,8 @@ ha_writev_cbk (call_frame_t *frame,</div><div class='ctx'> 		STACK_UNWIND (frame,</div><div class='ctx'> 			      op_ret,</div><div class='ctx'> 			      op_errno,</div><div class='del'>-			      stbuf);</div><div class='add'>+                              prebuf,</div><div class='add'>+			      postbuf);</div><div class='ctx'> 	}</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='hunk'>@@ -1820,7 +1850,9 @@ ha_fsync_cbk (call_frame_t *frame,</div><div class='ctx'> 	      void *cookie,</div><div class='ctx'> 	      xlator_t *this,</div><div class='ctx'> 	      int32_t op_ret,</div><div class='del'>-	      int32_t op_errno)</div><div class='add'>+	      int32_t op_errno,</div><div class='add'>+              struct stat *prebuf,</div><div class='add'>+              struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'> 	int ret = 0;</div><div class='ctx'> 	ret = ha_handle_cbk (frame, cookie, op_ret, op_errno);</div><div class='head'>diff --git a/xlators/cluster/map/src/map.c b/xlators/cluster/map/src/map.c<br/>index 3eb49e2eddc..91cf8eb24a1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/map/src/map.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/map/src/map.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/map/src/map.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/map/src/map.c</a></div><div class='hunk'>@@ -92,14 +92,15 @@ map_truncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		      xlator_t *this,</div><div class='ctx'> 		      int32_t op_ret,</div><div class='ctx'> 		      int32_t op_errno,</div><div class='del'>-		      struct stat *buf)</div><div class='add'>+		      struct stat *prebuf,</div><div class='add'>+                      struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='ctx'> 	</div><div class='del'>-	map_itransform (this, prev-&gt;this, buf-&gt;st_ino, &amp;buf-&gt;st_ino);</div><div class='add'>+	map_itransform (this, prev-&gt;this, postbuf-&gt;st_ino, &amp;postbuf-&gt;st_ino);</div><div class='ctx'> </div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, buf);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -109,14 +110,15 @@ map_ftruncate_cbk (call_frame_t *frame,</div><div class='ctx'> 		       xlator_t *this,</div><div class='ctx'> 		       int32_t op_ret,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='del'>-		       struct stat *buf)</div><div class='add'>+		       struct stat *prebuf,</div><div class='add'>+                       struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='ctx'> 	</div><div class='del'>-	map_itransform (this, prev-&gt;this, buf-&gt;st_ino, &amp;buf-&gt;st_ino);</div><div class='add'>+	map_itransform (this, prev-&gt;this, postbuf-&gt;st_ino, &amp;postbuf-&gt;st_ino);</div><div class='ctx'> </div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, buf);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -138,9 +140,10 @@ map_readlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		      xlator_t *this,</div><div class='ctx'> 		      int32_t op_ret,</div><div class='ctx'> 		      int32_t op_errno,</div><div class='del'>-		      const char *path)</div><div class='add'>+		      const char *path,</div><div class='add'>+                      struct stat *sbuf)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, path);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, path, sbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -149,9 +152,11 @@ map_unlink_cbk (call_frame_t *frame,</div><div class='ctx'> 		    void *cookie,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno)</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -160,9 +165,11 @@ map_rmdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		   void *cookie,</div><div class='ctx'> 		   xlator_t *this,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='del'>-		   int32_t op_errno)</div><div class='add'>+		   int32_t op_errno,</div><div class='add'>+                   struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -173,7 +180,11 @@ map_rename_cbk (call_frame_t *frame,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='del'>-		    struct stat *buf)</div><div class='add'>+		    struct stat *buf,</div><div class='add'>+                    struct stat *preoldparent,</div><div class='add'>+                    struct stat *postoldparent,</div><div class='add'>+                    struct stat *prenewparent,</div><div class='add'>+                    struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='hunk'>@@ -191,7 +202,9 @@ map_link_cbk (call_frame_t *frame,</div><div class='ctx'> 		  int32_t op_ret,</div><div class='ctx'> 		  int32_t op_errno,</div><div class='ctx'> 		  inode_t *inode,</div><div class='del'>-		  struct stat *buf)</div><div class='add'>+                  struct stat *buf,</div><div class='add'>+                  struct stat *preparent,</div><div class='add'>+                  struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='hunk'>@@ -240,14 +253,15 @@ map_writev_cbk (call_frame_t *frame,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='del'>-		    struct stat *stbuf)</div><div class='add'>+                    struct stat *prebuf,</div><div class='add'>+		    struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='ctx'> 	</div><div class='del'>-	map_itransform (this, prev-&gt;this, stbuf-&gt;st_ino, &amp;stbuf-&gt;st_ino);</div><div class='add'>+	map_itransform (this, prev-&gt;this, postbuf-&gt;st_ino, &amp;postbuf-&gt;st_ino);</div><div class='ctx'> </div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno, stbuf);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -268,9 +282,11 @@ map_fsync_cbk (call_frame_t *frame,</div><div class='ctx'> 		   void *cookie,</div><div class='ctx'> 		   xlator_t *this,</div><div class='ctx'> 		   int32_t op_ret,</div><div class='del'>-		   int32_t op_errno)</div><div class='add'>+		   int32_t op_errno,</div><div class='add'>+                   struct stat *prebuf,</div><div class='add'>+                   struct stat *postbuf)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND (frame, op_ret, op_errno);</div><div class='add'>+	STACK_UNWIND (frame, op_ret, op_errno, prebuf, postbuf);</div><div class='ctx'> 	return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -476,7 +492,9 @@ map_newentry_cbk (call_frame_t *frame,</div><div class='ctx'> 		  int32_t op_ret,</div><div class='ctx'> 		  int32_t op_errno,</div><div class='ctx'> 		  inode_t *inode,</div><div class='del'>-		  struct stat *buf)</div><div class='add'>+                  struct stat *buf,</div><div class='add'>+                  struct stat *preparent,</div><div class='add'>+                  struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='hunk'>@@ -497,7 +515,9 @@ map_create_cbk (call_frame_t *frame,</div><div class='ctx'> 		int32_t op_errno,</div><div class='ctx'> 		fd_t *fd,</div><div class='ctx'> 		inode_t *inode,</div><div class='del'>-		struct stat *buf)</div><div class='add'>+		struct stat *buf,</div><div class='add'>+                struct stat *preparent,</div><div class='add'>+                struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='hunk'>@@ -605,7 +625,8 @@ map_single_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		       int32_t op_errno,</div><div class='ctx'> 		       inode_t *inode,</div><div class='ctx'> 		       struct stat *buf,</div><div class='del'>-		       dict_t *dict)</div><div class='add'>+                       dict_t *dict,</div><div class='add'>+                       struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         call_frame_t *prev = NULL;</div><div class='ctx'>         prev  = cookie;</div><div class='hunk'>@@ -625,7 +646,8 @@ map_root_lookup_cbk (call_frame_t *frame,</div><div class='ctx'>                      int32_t op_errno,</div><div class='ctx'>                      inode_t *inode,</div><div class='ctx'>                      struct stat *buf,</div><div class='del'>-                     dict_t *dict)</div><div class='add'>+                     dict_t *dict,</div><div class='add'>+                     struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int          callcnt = 0;</div><div class='ctx'> 	map_local_t *local = NULL;</div><div class='hunk'>@@ -1210,7 +1232,7 @@ int32_t</div><div class='ctx'> map_open (call_frame_t *frame,</div><div class='ctx'> 	  xlator_t *this,</div><div class='ctx'> 	  loc_t *loc,</div><div class='del'>-	  int32_t flags, fd_t *fd)</div><div class='add'>+	  int32_t flags, fd_t *fd, int wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	int32_t op_errno = 1;</div><div class='ctx'> 	xlator_t *subvol   = NULL;</div><div class='hunk'>@@ -1228,7 +1250,7 @@ map_open (call_frame_t *frame,</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='ctx'> 	STACK_WIND (frame, map_open_cbk, subvol, </div><div class='del'>-                    subvol-&gt;fops-&gt;open, loc, flags, fd);</div><div class='add'>+                    subvol-&gt;fops-&gt;open, loc, flags, fd, wbflags);</div><div class='ctx'> </div><div class='ctx'> 	return 0;</div><div class='ctx'>  err:</div><div class='head'>diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c<br/>index 5a02d17bc2e..2d875ab3e2f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/stripe/src/stripe.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/stripe/src/stripe.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/stripe/src/stripe.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/stripe/src/stripe.c</a></div><div class='hunk'>@@ -70,6 +70,19 @@ stripe_get_matching_bs (const char *path, struct stripe_options *opts,</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'> /*</div><div class='add'>+ * stripe_common_remove_cbk -</div><div class='add'>+ */</div><div class='add'>+int32_t</div><div class='add'>+stripe_common_remove_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 stat *preparent, struct stat *postparent)</div><div class='add'>+{</div><div class='add'>+        STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent);</div><div class='add'>+        return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+/*</div><div class='ctx'>  * stripe_common_cbk -</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='hunk'>@@ -127,6 +140,169 @@ stripe_stack_unwind_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='add'>+</div><div class='add'>+int32_t</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 stat *prebuf,</div><div class='add'>+                  struct stat *postbuf)</div><div class='add'>+{</div><div class='add'>+        int32_t         callcnt = 0;</div><div class='add'>+        stripe_local_t *local   = NULL;</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 == -1) {</div><div class='add'>+                        gf_log (this-&gt;name, GF_LOG_DEBUG, </div><div class='add'>+                                "%s returned %s",</div><div class='add'>+                                ((call_frame_t *)cookie)-&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 == ENOTCONN)</div><div class='add'>+                                local-&gt;failed = 1;</div><div class='add'>+                }</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'>+                if (local-&gt;failed)</div><div class='add'>+                        local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+                if (local-&gt;loc.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+                if (local-&gt;loc2.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+</div><div class='add'>+                STACK_UNWIND (frame, local-&gt;op_ret, local-&gt;op_errno);</div><div class='add'>+        }</div><div class='add'>+        return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+/**</div><div class='add'>+ * stripe_stack_unwind_remove_cbk -  This function is used for unlink</div><div class='add'>+ * _cbk without any extra arguments (other than the minimum given)</div><div class='add'>+ * This is called from functions like fsync,unlink,rmdir etc.</div><div class='add'>+ *</div><div class='add'>+ */</div><div class='add'>+int32_t</div><div class='add'>+stripe_stack_unwind_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 stat *preparent,</div><div class='add'>+                                struct stat *postparent)</div><div class='add'>+{</div><div class='add'>+        int32_t         callcnt = 0;</div><div class='add'>+        stripe_local_t *local   = NULL;</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 == -1) {</div><div class='add'>+                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                                "%s returned %s",</div><div class='add'>+                                ((call_frame_t *)cookie)-&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 == ENOTCONN)</div><div class='add'>+                                local-&gt;failed = 1;</div><div class='add'>+                }</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'>+                if (local-&gt;failed)</div><div class='add'>+                        local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+                if (local-&gt;loc.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+                if (local-&gt;loc2.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+</div><div class='add'>+                STACK_UNWIND (frame, local-&gt;op_ret, local-&gt;op_errno);</div><div class='add'>+        }</div><div class='add'>+        return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+int32_t</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 stat *prebuf,</div><div class='add'>+                     struct stat *postbuf)</div><div class='add'>+{</div><div class='add'>+        int32_t         callcnt = 0;</div><div class='add'>+        stripe_local_t *local = NULL;</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 == -1) {</div><div class='add'>+                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                                "%s returned error %s",</div><div class='add'>+                                ((call_frame_t *)cookie)-&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 == ENOTCONN)</div><div class='add'>+                                local-&gt;failed = 1;</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'>+                        if (local-&gt;stbuf.st_blksize == 0) {</div><div class='add'>+                                local-&gt;stbuf = *postbuf;</div><div class='add'>+                                /* Because st_blocks gets added again */</div><div class='add'>+                                local-&gt;stbuf.st_blocks = 0;</div><div class='add'>+                        }</div><div class='add'>+</div><div class='add'>+                        if (FIRST_CHILD(this) ==</div><div class='add'>+                            ((call_frame_t *)cookie)-&gt;this) {</div><div class='add'>+                                /* Always, pass the inode number of</div><div class='add'>+                                   first child to the above layer */</div><div class='add'>+                                local-&gt;stbuf.st_ino = postbuf-&gt;st_ino;</div><div class='add'>+                                local-&gt;stbuf.st_mtime = postbuf-&gt;st_mtime;</div><div class='add'>+                        }</div><div class='add'>+</div><div class='add'>+                        local-&gt;stbuf.st_blocks += postbuf-&gt;st_blocks;</div><div class='add'>+                        if (local-&gt;stbuf.st_size &lt; postbuf-&gt;st_size)</div><div class='add'>+                                local-&gt;stbuf.st_size = postbuf-&gt;st_size;</div><div class='add'>+                        if (local-&gt;stbuf.st_blksize != postbuf-&gt;st_blksize) {</div><div class='add'>+                                /* TODO: add to blocks in terms of</div><div class='add'>+                                   original block size */</div><div class='add'>+                        }</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;loc.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+                if (local-&gt;loc2.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+</div><div class='add'>+                STACK_UNWIND (frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                              &amp;local-&gt;stbuf);</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'>+</div><div class='ctx'> int32_t </div><div class='ctx'> stripe_common_buf_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                        int32_t op_ret, int32_t op_errno, struct stat *buf)</div><div class='hunk'>@@ -135,6 +311,76 @@ stripe_common_buf_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='add'>+</div><div class='add'>+int32_t</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 stat *buf,</div><div class='add'>+                         struct stat *preoldparent, struct stat *postoldparent,</div><div class='add'>+                         struct stat *prenewparent, struct stat *postnewparent)</div><div class='add'>+{</div><div class='add'>+        int32_t         callcnt = 0;</div><div class='add'>+        stripe_local_t *local = NULL;</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 == -1) {</div><div class='add'>+                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                                "%s returned error %s",</div><div class='add'>+                                ((call_frame_t *)cookie)-&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 == ENOTCONN)</div><div class='add'>+                                local-&gt;failed = 1;</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'>+                        if (local-&gt;stbuf.st_blksize == 0) {</div><div class='add'>+                                local-&gt;stbuf = *buf;</div><div class='add'>+                                /* Because st_blocks gets added again */</div><div class='add'>+                                local-&gt;stbuf.st_blocks = 0;</div><div class='add'>+                        }</div><div class='add'>+</div><div class='add'>+                        if (FIRST_CHILD(this) ==</div><div class='add'>+                            ((call_frame_t *)cookie)-&gt;this) {</div><div class='add'>+                                /* Always, pass the inode number of</div><div class='add'>+                                   first child to the above layer */</div><div class='add'>+                                local-&gt;stbuf.st_ino = buf-&gt;st_ino;</div><div class='add'>+                                local-&gt;stbuf.st_mtime = buf-&gt;st_mtime;</div><div class='add'>+                        }</div><div class='add'>+</div><div class='add'>+                        local-&gt;stbuf.st_blocks += buf-&gt;st_blocks;</div><div class='add'>+                        if (local-&gt;stbuf.st_size &lt; buf-&gt;st_size)</div><div class='add'>+                                local-&gt;stbuf.st_size = buf-&gt;st_size;</div><div class='add'>+                        if (local-&gt;stbuf.st_blksize != buf-&gt;st_blksize) {</div><div class='add'>+                                /* TODO: add to blocks in terms of</div><div class='add'>+                                   original block size */</div><div class='add'>+                        }</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;loc.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+                if (local-&gt;loc2.path)</div><div class='add'>+                        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+</div><div class='add'>+                STACK_UNWIND (frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                              &amp;local-&gt;stbuf);</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'>+</div><div class='ctx'> /**</div><div class='ctx'>  * stripe_stack_unwind_buf_cbk -  This function is used for all the _cbk with </div><div class='ctx'>  *    'struct stat *buf' as extra argument (other than minimum)</div><div class='hunk'>@@ -214,9 +460,11 @@ stripe_stack_unwind_buf_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> int32_t </div><div class='ctx'> stripe_common_inode_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='del'>-                         struct stat *buf)</div><div class='add'>+                         struct stat *buf, struct stat *preparent,</div><div class='add'>+                         struct stat *postparent)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND (frame, op_ret, op_errno, inode, buf);</div><div class='add'>+        STACK_UNWIND (frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                      postparent);</div><div class='ctx'>         return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -232,7 +480,8 @@ int32_t</div><div class='ctx'> stripe_stack_unwind_inode_cbk (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, inode_t *inode,</div><div class='del'>-                               struct stat *buf)</div><div class='add'>+                               struct stat *buf, struct stat *preparent,</div><div class='add'>+                               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         int32_t         callcnt = 0;</div><div class='ctx'>         stripe_local_t *local   = NULL;</div><div class='hunk'>@@ -293,7 +542,7 @@ stripe_stack_unwind_inode_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> int32_t </div><div class='ctx'> stripe_lookup_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='del'>-                   struct stat *buf, dict_t *dict)</div><div class='add'>+                   struct stat *buf, dict_t *dict, struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         int32_t         callcnt = 0;</div><div class='ctx'>         dict_t         *tmp_dict = NULL;</div><div class='hunk'>@@ -611,7 +860,7 @@ stripe_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)</div><div class='ctx'>                 send_fop_to_all = 1;</div><div class='ctx'> </div><div class='ctx'>         if (!send_fop_to_all) {</div><div class='del'>-                STACK_WIND (frame, stripe_common_buf_cbk, trav-&gt;xlator,</div><div class='add'>+                STACK_WIND (frame, stripe_truncate_cbk, trav-&gt;xlator,</div><div class='ctx'>                             trav-&gt;xlator-&gt;fops-&gt;truncate, loc, offset);</div><div class='ctx'>         } else {</div><div class='ctx'>                 /* Initialization */</div><div class='hunk'>@@ -626,7 +875,7 @@ stripe_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)</div><div class='ctx'>                 local-&gt;call_count = priv-&gt;child_count;</div><div class='ctx'>     </div><div class='ctx'>                 while (trav) {</div><div class='del'>-                        STACK_WIND (frame, stripe_stack_unwind_buf_cbk,</div><div class='add'>+                        STACK_WIND (frame, stripe_truncate_cbk,</div><div class='ctx'>                                     trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;truncate,</div><div class='ctx'>                                     loc, offset);</div><div class='ctx'>                         trav = trav-&gt;next;</div><div class='hunk'>@@ -822,7 +1071,9 @@ stripe_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'> </div><div class='ctx'> int32_t </div><div class='ctx'> 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 stat *buf)</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, struct stat *buf,</div><div class='add'>+                         struct stat *preoldparent, struct stat *postoldparent,</div><div class='add'>+                         struct stat *prenewparent, struct stat *postnewparent)</div><div class='ctx'> {</div><div class='ctx'>         stripe_local_t *local = NULL;</div><div class='ctx'>         xlator_list_t  *trav = NULL;</div><div class='hunk'>@@ -840,7 +1091,7 @@ stripe_first_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>         trav = trav-&gt;next; /* Skip first child */</div><div class='ctx'> </div><div class='ctx'>         while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_stack_unwind_buf_cbk,</div><div class='add'>+                STACK_WIND (frame, stripe_stack_rename_cbk,</div><div class='ctx'>                             trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;rename,</div><div class='ctx'>                             &amp;local-&gt;loc, &amp;local-&gt;loc2);</div><div class='ctx'>                 trav = trav-&gt;next;</div><div class='hunk'>@@ -933,9 +1184,10 @@ stripe_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)</div><div class='ctx'>  */</div><div class='ctx'> int32_t </div><div class='ctx'> stripe_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='add'>+                     int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                     struct stat *sbuf)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND (frame, op_ret, op_errno, path);</div><div class='add'>+        STACK_UNWIND (frame, op_ret, op_errno, path, sbuf);</div><div class='ctx'>         return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -994,7 +1246,7 @@ stripe_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'>                 send_fop_to_all = 1;</div><div class='ctx'> </div><div class='ctx'>         if (!send_fop_to_all) {</div><div class='del'>-                STACK_WIND (frame, stripe_common_cbk, trav-&gt;xlator,</div><div class='add'>+                STACK_WIND (frame, stripe_common_remove_cbk, trav-&gt;xlator,</div><div class='ctx'>                             trav-&gt;xlator-&gt;fops-&gt;unlink, loc);</div><div class='ctx'>         } else {</div><div class='ctx'>                 /* Don't unlink a file if a node is down */</div><div class='hunk'>@@ -1014,7 +1266,7 @@ stripe_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'>                 local-&gt;call_count = priv-&gt;child_count;</div><div class='ctx'>     </div><div class='ctx'>                 while (trav) {</div><div class='del'>-                        STACK_WIND (frame, stripe_stack_unwind_cbk,</div><div class='add'>+                        STACK_WIND (frame, stripe_stack_unwind_unlink_cbk,</div><div class='ctx'>                                     trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='ctx'>                                     loc);</div><div class='ctx'>                         trav = trav-&gt;next;</div><div class='hunk'>@@ -1030,7 +1282,9 @@ stripe_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> </div><div class='ctx'> int32_t </div><div class='ctx'> 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)</div><div class='add'>+                        int32_t op_ret, int32_t op_errno,struct stat *preparent,</div><div class='add'>+                        struct stat *postparent)</div><div class='add'>+</div><div class='ctx'> {</div><div class='ctx'>         xlator_list_t *trav = NULL;</div><div class='ctx'>         stripe_local_t *local = NULL;</div><div class='hunk'>@@ -1047,7 +1301,7 @@ stripe_first_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>         trav = trav-&gt;next; /* Skip first child */</div><div class='ctx'> </div><div class='ctx'>         while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_stack_unwind_cbk, trav-&gt;xlator,</div><div class='add'>+                STACK_WIND (frame, stripe_stack_unwind_unlink_cbk, trav-&gt;xlator,</div><div class='ctx'>                             trav-&gt;xlator-&gt;fops-&gt;rmdir, &amp;local-&gt;loc);</div><div class='ctx'>                 trav = trav-&gt;next;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1139,7 +1393,8 @@ stripe_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='ctx'> int32_t </div><div class='ctx'> stripe_mknod_ifreg_fail_unlink_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'>                                     xlator_t *this, int32_t op_ret,</div><div class='del'>-                                    int32_t op_errno)</div><div class='add'>+                                    int32_t op_errno, struct stat *preparent,</div><div class='add'>+                                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         int32_t         callcnt = 0;</div><div class='ctx'>         stripe_local_t *local = NULL;</div><div class='hunk'>@@ -1216,7 +1471,8 @@ stripe_mknod_ifreg_setxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> int32_t</div><div class='ctx'> stripe_mknod_ifreg_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='del'>-                        struct stat *buf)</div><div class='add'>+                        struct stat *buf, struct stat *preparent,</div><div class='add'>+                        struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         int               ret = 0;</div><div class='ctx'>         int32_t           callcnt = 0;</div><div class='hunk'>@@ -1544,7 +1800,8 @@ stripe_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)</div><div class='ctx'> int32_t </div><div class='ctx'> stripe_create_fail_unlink_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'>                                xlator_t *this, int32_t op_ret,</div><div class='del'>-                               int32_t op_errno)</div><div class='add'>+                               int32_t op_errno, struct stat *preparent,</div><div class='add'>+                               struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         int32_t         callcnt = 0;</div><div class='ctx'>         fd_t           *lfd = NULL;</div><div class='hunk'>@@ -1632,7 +1889,8 @@ stripe_create_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> int32_t</div><div class='ctx'> stripe_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                   inode_t *inode, struct stat *buf)</div><div class='add'>+                   inode_t *inode, struct stat *buf, struct stat *preparent,</div><div class='add'>+                   struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'>         int32_t           callcnt = 0;</div><div class='ctx'>         stripe_local_t   *local = NULL;</div><div class='hunk'>@@ -2015,7 +2273,7 @@ stripe_open_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                 while (trav) {</div><div class='ctx'>                         STACK_WIND (frame, stripe_open_cbk, trav-&gt;xlator,</div><div class='ctx'>                                     trav-&gt;xlator-&gt;fops-&gt;open, &amp;local-&gt;loc, </div><div class='del'>-                                    local-&gt;flags, local-&gt;fd);</div><div class='add'>+                                    local-&gt;flags, local-&gt;fd, 0);</div><div class='ctx'>                         trav = trav-&gt;next;</div><div class='ctx'>                 }</div><div class='ctx'>         }</div><div class='hunk'>@@ -2035,7 +2293,7 @@ stripe_open_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='ctx'> stripe_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             int32_t flags, fd_t *fd)</div><div class='add'>+             int32_t flags, fd_t *fd, int32_t wbflags)</div><div class='ctx'> {</div><div class='ctx'>         stripe_local_t   *local = NULL;</div><div class='ctx'>         stripe_private_t *priv = NULL;</div><div class='hunk'>@@ -2100,7 +2358,8 @@ stripe_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='ctx'>                 while (trav) {</div><div class='ctx'>                         STACK_WIND (frame, stripe_open_cbk, trav-&gt;xlator,</div><div class='ctx'>                                     trav-&gt;xlator-&gt;fops-&gt;open,</div><div class='del'>-                                    &amp;local-&gt;loc, local-&gt;flags, local-&gt;fd);</div><div class='add'>+                                    &amp;local-&gt;loc, local-&gt;flags, local-&gt;fd,</div><div class='add'>+                                    wbflags);</div><div class='ctx'>                         trav = trav-&gt;next;</div><div class='ctx'>                 }</div><div class='ctx'>         }</div><div class='hunk'>@@ -2464,7 +2723,7 @@ stripe_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)</div><div class='ctx'>         local-&gt;call_count = priv-&gt;child_count;</div><div class='ctx'>         </div><div class='ctx'>         while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_stack_unwind_cbk, trav-&gt;xlator,</div><div class='add'>+                STACK_WIND (frame, stripe_fsync_cbk, trav-&gt;xlator,</div><div class='ctx'>                             trav-&gt;xlator-&gt;fops-&gt;fsync, fd, flags);</div><div class='ctx'>                 trav = trav-&gt;next;</div><div class='ctx'>         }</div><div class='hunk'>@@ -2552,7 +2811,7 @@ stripe_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)</div><div class='ctx'>         local-&gt;call_count = priv-&gt;child_count;</div><div class='ctx'>         </div><div class='ctx'>         while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_stack_unwind_buf_cbk, trav-&gt;xlator,</div><div class='add'>+                STACK_WIND (frame, stripe_truncate_cbk, trav-&gt;xlator,</div><div class='ctx'>                             trav-&gt;xlator-&gt;fops-&gt;ftruncate, fd, offset);</div><div class='ctx'>                 trav = trav-&gt;next;</div><div class='ctx'>         }</div><div class='hunk'>@@ -2823,7 +3082,8 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='ctx'> 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 stat *stbuf)</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct stat *prebuf,</div><div class='add'>+                   struct stat *postbuf)</div><div class='ctx'> {</div><div class='ctx'>         int32_t         callcnt = 0;</div><div class='ctx'>         stripe_local_t *local = NULL;</div><div class='hunk'>@@ -2844,7 +3104,7 @@ stripe_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                 }</div><div class='ctx'>                 if (op_ret &gt;= 0) {</div><div class='ctx'>                         local-&gt;op_ret += op_ret;</div><div class='del'>-                        local-&gt;stbuf = *stbuf;</div><div class='add'>+                        local-&gt;stbuf = *postbuf;</div><div class='ctx'>                 }</div><div class='ctx'>         }</div><div class='ctx'>         UNLOCK (&amp;frame-&gt;lock);</div><div class='head'>diff --git a/xlators/cluster/unify/src/unify.c b/xlators/cluster/unify/src/unify.c<br/>index b641fb3307e..80ba10278c1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/unify/src/unify.c?h=v3.3.0qa10&amp;id=186a86f342625a9dce53fe537f8237c6099d5c54'>xlators/cluster/unify/src/unify.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/unify/src/unify.c?h=v3.3.0qa10&amp;id=e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc'>xlators/cluster/unify/src/unify.c</a></div><div class='hunk'>@@ -328,7 +328,8 @@ unify_lookup_cbk (call_frame_t *frame,</div><div class='ctx'> 		  int32_t op_errno,</div><div class='ctx'> 		  inode_t *inode,</div><div class='ctx'> 		  struct stat *buf,</div><div class='del'>-		  dict_t *dict)</div><div class='add'>+		  dict_t *dict,</div><div class='add'>+                  struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int32_t callcnt = 0;</div><div class='ctx'> 	unify_private_t *priv = this-&gt;private;</div><div class='hunk'>@@ -788,7 +789,9 @@ unify_mkdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		 int32_t op_ret,</div><div class='ctx'> 		 int32_t op_errno,</div><div class='ctx'> 		 inode_t *inode,</div><div class='del'>-		 struct stat *buf)</div><div class='add'>+                 struct stat *buf,</div><div class='add'>+                 struct stat *preparent,</div><div class='add'>+                 struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int32_t callcnt = 0;</div><div class='ctx'> 	unify_private_t *priv = this-&gt;private;</div><div class='hunk'>@@ -849,7 +852,9 @@ unify_ns_mkdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='ctx'> 		    int32_t op_errno,</div><div class='ctx'> 		    inode_t *inode,</div><div class='del'>-		    struct stat *buf)</div><div class='add'>+                    struct stat *buf,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	unify_private_t *priv = this-&gt;private;</div><div class='ctx'> 	unify_local_t *local = frame-&gt;local;</div><div class='hunk'>@@ -928,7 +933,9 @@ unify_rmdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		 void *cookie,</div><div class='ctx'> 		 xlator_t *this,</div><div class='ctx'> 		 int32_t op_ret,</div><div class='del'>-		 int32_t op_errno)</div><div class='add'>+		 int32_t op_errno,</div><div class='add'>+                 struct stat *preparent,</div><div class='add'>+                 struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int32_t callcnt = 0;</div><div class='ctx'> 	unify_private_t *priv = this-&gt;private;</div><div class='hunk'>@@ -960,7 +967,9 @@ unify_ns_rmdir_cbk (call_frame_t *frame,</div><div class='ctx'> 		    void *cookie,</div><div class='ctx'> 		    xlator_t *this,</div><div class='ctx'> 		    int32_t op_ret,</div><div class='del'>-		    int32_t op_errno)</div><div class='add'>+		    int32_t op_errno,</div><div class='add'>+                    struct stat *preparent,</div><div class='add'>+                    struct stat *postparent)</div><div class='ctx'> {</div><div class='ctx'> 	int16_t index = 0;</div><div class='ctx'> 	unify_private_t *priv = this-&gt;private;</div><div class='hunk'>@@ -1237,7 +1246,8 @@ unify_open (call_frame_t *frame,</div><div class='ctx'> 	    xlator_t *this,</div><div class='ctx'> 	    loc_t *loc,</div><div class='ctx'> 	    int32_t flags,</div><div class='del'>-	    fd_t *fd)</div><div class='add'>+	    fd_t *fd,</div><div class='add'>+            int32_t wbflags)</div><div class='ctx'> {</div><div class='ctx'> 	unify_private_t *priv = this-&gt;private;</div><div class='ctx'> 	unify_local_t *local = NULL;</div><div class='hunk'>@@ -1305,7 +1315,7 @@ unify_open (call_frame_t *frame,</div><div class='ctx'> 				   priv-&gt;xl_array[file_list[index]]-&gt;fops-&gt;open,</div><div class='ctx'> 				   loc,</div><div class='ctx'> 				   flags,</div><div class='del'>-				   fd);</div><div class='add'>+				   fd, wbflags);</div><div class='ctx'> 		if (need_break)</div><div class='ctx'> 			break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -1319,7 +1329,9 @