<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="color: rgb(0, 0, 0);"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt;"><br>
</span><span style="font-family: &quot;Segoe UI&quot;, &quot;Segoe UI Web (West European)&quot;, -apple-system, &quot;system-ui&quot;, Roboto, &quot;Helvetica Neue&quot;, sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255);">here is the link&nbsp;</span></div>
<div class="elementToProof" style="font-family: &quot;Segoe UI&quot;, &quot;Segoe UI Web (West European)&quot;, -apple-system, &quot;system-ui&quot;, Roboto, &quot;Helvetica Neue&quot;, sans-serif; font-size: 14.6667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);"><a href="https://virtuozzo.atlassian.net/browse/VSTOR-136027">https://virtuozzo.atlassian.net/browse/VSTOR-136027</a></span></div>
<div class="elementToProof" style="font-family: &quot;Segoe UI&quot;, &quot;Segoe UI Web (West European)&quot;, -apple-system, &quot;system-ui&quot;, Roboto, &quot;Helvetica Neue&quot;, sans-serif; font-size: 14.6667px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(255, 255, 255);">the AI analysis is valid; I'm working on a new one.&nbsp;</span></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Pavel Tikhomirov &lt;ptikhomirov@virtuozzo.com&gt;<br>
<b>Sent:</b> 25 June 2026 17:03<br>
<b>To:</b> Kui Liu &lt;kui.liu@virtuozzo.com&gt;; devel@openvz.org &lt;devel@openvz.org&gt;<br>
<b>Cc:</b> Andrey Zaitsev &lt;azaitsev@virtuozzo.com&gt;<br>
<b>Subject:</b> Re: [Devel] [PATCH VZ10 v2] fs/fuse: align fuse_create_open()'s open path with fuse_open()</font>
<div>&nbsp;</div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText"><br>
<br>
On 6/23/26 08:43, Liu Kui wrote:<br>
&gt; fuse_create_open()'s close_wait branch was not correct -- in particular<br>
&gt; the fput() in its error path was wrong; fuse_open()'s close_wait branch<br>
&gt; should apply instead. Refactor the close_wait branch into a new<br>
&gt; function used in both places. fuse_sync_release() applies to the<br>
&gt; close_wait error path in both places.<br>
&gt; <br>
<br>
Is there a bug link?<br>
<br>
&gt; Signed-off-by: Liu Kui &lt;kui.liu@virtuozzo.com&gt;<br>
&gt; ---<br>
&gt; Changes in v2:<br>
&gt;&nbsp;&nbsp; - Factor the close_wait open branch into fuse_open_close_wait(); <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; call it from both fuse_open() and fuse_create_open() instead of<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; duplicating the block in each.<br>
&gt;&nbsp;&nbsp; - Use fuse_sync_release() on the close_wait error path for both<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; callers. It is functionally equivalent to fuse_release_common() <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; used in fuse_open(). <br>
&gt; <br>
&gt;&nbsp; fs/fuse/dir.c&nbsp;&nbsp;&nbsp; | 18 ++-----------<br>
&gt;&nbsp; fs/fuse/file.c&nbsp;&nbsp; | 67 +++++++++++++++++++++++++++---------------------<br>
&gt;&nbsp; fs/fuse/fuse_i.h |&nbsp; 1 +<br>
&gt;&nbsp; 3 files changed, 41 insertions(+), 45 deletions(-)<br>
&gt; <br>
&gt; diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c<br>
&gt; index 45ee4f1e4b68..2faf052632d6 100644<br>
&gt; --- a/fs/fuse/dir.c<br>
&gt; +++ b/fs/fuse/dir.c<br>
&gt; @@ -722,22 +722,8 @@ static int fuse_create_open(struct mnt_idmap *idmap, struct inode *dir,<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invalidate_inode_pages2(inode-&gt;i_mapping);<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt;&nbsp; <br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp; if (fm-&gt;fc-&gt;close_wait) {<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct fuse_inode *fi = get_fuse_inode(inode);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool need_open;<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode_lock(inode);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_lock(&amp;fi-&gt;lock);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; need_open = (++fi-&gt;num_openers == 1);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_unlock(&amp;fi-&gt;lock);<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (need_open &amp;&amp; fm-&gt;fc-&gt;kio.op &amp;&amp; fm-&gt;fc-&gt;kio.op-&gt;file_open) {<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fm-&gt;fc-&gt;kio.op-&gt;file_open(file, inode);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err)<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fput(file);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode_unlock(inode);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; if (!err &amp;&amp; fm-&gt;fc-&gt;close_wait)<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fuse_open_close_wait(inode, file);<br>
&gt;&nbsp; <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
&gt;&nbsp; <br>
&gt; diff --git a/fs/fuse/file.c b/fs/fuse/file.c<br>
&gt; index 58202a96517e..faf39887125a 100644<br>
&gt; --- a/fs/fuse/file.c<br>
&gt; +++ b/fs/fuse/file.c<br>
&gt; @@ -337,6 +337,42 @@ static void fuse_truncate_update_attr(struct inode *inode, struct file *file)<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fuse_invalidate_attr_mask(inode, FUSE_STATX_MODSIZE);<br>
&gt;&nbsp; }<br>
&gt;&nbsp; <br>
&gt; +int fuse_open_close_wait(struct inode *inode, struct file *file)<br>
&gt; +{<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; struct fuse_conn *fc = get_fuse_conn(inode);<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; struct fuse_inode *fi = get_fuse_inode(inode);<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; struct fuse_file *ff = file-&gt;private_data;<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; int err = 0;<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; inode_lock(inode);<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; spin_lock(&amp;fi-&gt;lock);<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; if (++fi-&gt;num_openers == 1 || fi-&gt;i_size_unstable) {<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;i_size_unstable = 1;<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;inval_mask = ~0;<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_unlock(&amp;fi-&gt;lock);<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fuse_update_attributes(inode, file, ~0);<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!err &amp;&amp; fc-&gt;kio.op &amp;&amp; fc-&gt;kio.op-&gt;file_open)<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fc-&gt;kio.op-&gt;file_open(file, inode);<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_lock(&amp;fi-&gt;lock);<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;i_size_unstable = 0;<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err)<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;num_openers--;<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; file-&gt;f_mode |= FMODE_NOWAIT;<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; spin_unlock(&amp;fi-&gt;lock);<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; inode_unlock(inode);<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; if (err)<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fuse_sync_release(fi, ff, file-&gt;f_flags);<br>
&gt; +<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
&gt; +}<br>
&gt; +<br>
&gt;&nbsp; static int fuse_open(struct inode *inode, struct file *file)<br>
&gt;&nbsp; {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct fuse_mount *fm = get_fuse_mount(inode);<br>
&gt; @@ -399,35 +435,8 @@ static int fuse_open(struct inode *inode, struct file *file)<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_wb_truncate || dax_truncate)<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode_unlock(inode);<br>
&gt;&nbsp; <br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp; if (!err &amp;&amp; fc-&gt;close_wait) {<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode_lock(inode);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_lock(&amp;fi-&gt;lock);<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (++fi-&gt;num_openers == 1 || fi-&gt;i_size_unstable) {<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;i_size_unstable = 1;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;inval_mask = ~0;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_unlock(&amp;fi-&gt;lock);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fuse_update_attributes(inode, file, ~0);<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!err &amp;&amp; fc-&gt;kio.op &amp;&amp; fc-&gt;kio.op-&gt;file_open)<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fc-&gt;kio.op-&gt;file_open(file, inode);<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_lock(&amp;fi-&gt;lock);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;i_size_unstable = 0;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err)<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi-&gt;num_openers--;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file-&gt;f_mode |= FMODE_NOWAIT;<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spin_unlock(&amp;fi-&gt;lock);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode_unlock(inode);<br>
&gt; -<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err) {<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fuse_release_common(file, false);<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; -&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp; if (!err &amp;&amp; fc-&gt;close_wait)<br>
&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = fuse_open_close_wait(inode, file);<br>
&gt;&nbsp; <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
&gt;&nbsp; }<br>
&gt; diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h<br>
&gt; index a834a5b4dfe2..6f462f0c4c3c 100644<br>
&gt; --- a/fs/fuse/fuse_i.h<br>
&gt; +++ b/fs/fuse/fuse_i.h<br>
&gt; @@ -1317,6 +1317,7 @@ void fuse_read_args_fill(struct fuse_io_args *ia, struct file *file, loff_t pos,<br>
&gt;&nbsp; struct fuse_file *fuse_file_alloc(struct fuse_mount *fm, bool release);<br>
&gt;&nbsp; void fuse_file_free(struct fuse_file *ff);<br>
&gt;&nbsp; int fuse_finish_open(struct inode *inode, struct file *file);<br>
&gt; +int fuse_open_close_wait(struct inode *inode, struct file *file);<br>
&gt;&nbsp; <br>
&gt;&nbsp; void fuse_sync_release(struct fuse_inode *fi, struct fuse_file *ff,<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int flags);<br>
<br>
-- <br>
Best regards, Pavel Tikhomirov<br>
Senior Software Developer, Virtuozzo.<br>
<br>
</div>
</span></font></div>
</body>
</html>