<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.file-systems.ocfs2.devel">
    <title>gmane.comp.file-systems.ocfs2.devel</title>
    <link>http://blog.gmane.org/gmane.comp.file-systems.ocfs2.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7865"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7862"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7846"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7837"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7821"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7820"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7799"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7777"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7774"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7771"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7769"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7768"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7766"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7762"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7757"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7756"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7754"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7746"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7744"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7742"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7865">
    <title>[PATCH] Fix waiting status race condition in dlmrecovery V2</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7865</link>
    <description>&lt;pre&gt;From: "Xiaowei.Hu" &amp;lt;xiaowei.hu&amp;lt; at &amp;gt;oracle.com&amp;gt;

when the master requested locks ,but one/some of the live nodes died,
after it received the request msg and before send out the locks packages,
the recovery will fall into endless loop,waiting for the status changed to finalize

NodeA                                     NodeB
selected as recovery master
dlm_remaster_locks
  -&amp;gt; dlm_requeset_all_locks
  this send request locks msg to B
                                          received the msg from A,
                                          queue worker dlm_request_all_locks_worker
                                          return 0
go on set state to requested
wait for the state become done
                                          NodeB lost connection due to network
                                          before the worker begin, or it die.

NodeA still waiting for the change of reco state.
It won't end if it not get data done msg.
And at this time nodeB do not realize this (or it just died),
it won't send the msg for ever, nodeA left in the recovery process forever.

This patch let the recovery master check if the node still in live node
map when it stay in REQUESTED status.

Signed-off-by: Xiaowei.Hu &amp;lt;xiaowei.hu&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlm/dlmrecovery.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index 01ebfd0..546c5b5 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -339,6 +339,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int dlm_reco_master_ready(struct dlm_ctxt *dlm)
 return ready;
 }
 
+/* returns true if node is still in the live node map
+ * this map is cleared before domain map,could be checked in recovery*/
+int dlm_is_node_in_livemap(struct dlm_ctxt *dlm, u8 node)
+{
+int live;
+spin_lock(&amp;amp;dlm-&amp;gt;spinlock);
+live = !test_bit(node, dlm-&amp;gt;live_nodes_map);
+spin_unlock(&amp;amp;dlm-&amp;gt;spinlock);
+return live;
+}
+
 /* returns true if node is no longer in the domain
  * could be dead or just not joined */
 int dlm_is_node_dead(struct dlm_ctxt *dlm, u8 node)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -679,7 +690,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node)
      dlm-&amp;gt;name, ndata-&amp;gt;node_num,
      ndata-&amp;gt;state==DLM_RECO_NODE_DATA_RECEIVING ?
      "receiving" : "requested");
-all_nodes_done = 0;
+if (!dlm_is_node_in_livemap(dlm, ndata-&amp;gt;node_num))
+ndata-&amp;gt;state = DLM_RECO_NODE_DATA_DEAD;
+else
+all_nodes_done = 0;
 break;
 case DLM_RECO_NODE_DATA_DONE:
 mlog(0, "%s: node %u state is done\n",
&lt;/pre&gt;</description>
    <dc:creator>xiaowei.hu&lt; at &gt;oracle.com</dc:creator>
    <dc:date>2012-05-26T02:27:29</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7862">
    <title>[PATCH] Fix waiting status race condition in dlmrecovery</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7862</link>
    <description>&lt;pre&gt;From: "Xiaowei.Hu" &amp;lt;xiaowei.hu&amp;lt; at &amp;gt;oracle.com&amp;gt;

when the master requested locks ,but one/some of the live nodes died,
after it received the request msg and before send out the locks packages,
the recovery will fall into endless loop,waiting for the status changed to finalize

NodeA                                     NodeB
selected as recovery master
dlm_remaster_locks
  -&amp;gt; dlm_requeset_all_locks
  this send request locks msg to B
                                          received the msg from A,
                                          queue worker dlm_request_all_locks_worker
                                          return 0
go on set state to requested
wait for the state become done
                                          NodeB lost connection due to network
                                          before the worker begin, or it die.
NodeA still waiting for the
change of reco state.
It won't end if it not get data done msg
And at this time nodeB do not realize this (or it just died),
it won't send the msg for ever, nodeA left in the recovery process forever.

This patch let the recovery master check if the node still in live node
map when it stay in REQUESTED status.

Signed-off-by: Xiaowei.Hu &amp;lt;xiaowei.hu&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlm/dlmrecovery.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index 01ebfd0..62659e8 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -555,6 +555,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node)
 int all_nodes_done;
 int destroy = 0;
 int pass = 0;
+int dying = 0;
 
 do {
 /* we have become recovery master.  there is no escaping
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -659,6 +660,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node)
 list_for_each_entry(ndata, &amp;amp;dlm-&amp;gt;reco.node_data, list) {
 mlog(0, "checking recovery state of node %u\n",
      ndata-&amp;gt;node_num);
+dying = 0;
 switch (ndata-&amp;gt;state) {
 case DLM_RECO_NODE_DATA_INIT:
 case DLM_RECO_NODE_DATA_REQUESTING:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -679,6 +681,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node)
      dlm-&amp;gt;name, ndata-&amp;gt;node_num,
      ndata-&amp;gt;state==DLM_RECO_NODE_DATA_RECEIVING ?
      "receiving" : "requested");
+spin_lock(&amp;amp;dlm-&amp;gt;spinlock);
+dying = !test_bit(ndata-&amp;gt;node_num, dlm-&amp;gt;live_nodes_map);
+spin_unlock(&amp;amp;dlm-&amp;gt;spinlock);
+if (dying) {
+ndata-&amp;gt;state = DLM_RECO_NODE_DATA_DEAD;
+break;
+}
 all_nodes_done = 0;
 break;
 case DLM_RECO_NODE_DATA_DONE:
&lt;/pre&gt;</description>
    <dc:creator>xiaowei.hu&lt; at &gt;oracle.com</dc:creator>
    <dc:date>2012-05-25T05:53:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7846">
    <title>ocfs2 discontiguous localalloc patches</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7846</link>
    <description>&lt;pre&gt;Hi all,

can you please review following 3 patches that implement discontiguous
localalloc bitmap support for ocfs2 file system. This feature helps
applications that significantly fragment the filesystem.

These fixes needs changes to ocfs2 tools as well. I am sending those patches
for review separately.

A write up on this feature is available at
http://oss.oracle.com/osswiki/OCFS2/DesignDocs/DiscontiguousLocalAlloc.html

Thanks,
--Srini
&lt;/pre&gt;</description>
    <dc:creator>Srinivas Eeda</dc:creator>
    <dc:date>2012-05-07T23:21:27</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7837">
    <title>[patch] ocfs2: cleanup error handling ino2hb_alloc_hb_set()</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7837</link>
    <description>&lt;pre&gt;If "ret" is NULL, then "hs" is also NULL, so there is no need to free
it.  config_group_init_type_name() can't fail if the name ("heartbeat"
in this case) is less than CONFIGFS_ITEM_NAME_LEN (20) characters long
so we can just remove this error handling code.

Signed-off-by: Dan Carpenter &amp;lt;dan.carpenter&amp;lt; at &amp;gt;oracle.com&amp;gt;

diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
index f3f2d95..0bca51b 100644
--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2306,20 +2306,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static struct config_item_type o2hb_heartbeat_group_type = {
 struct config_group *o2hb_alloc_hb_set(void)
 {
 struct o2hb_heartbeat_group *hs = NULL;
-struct config_group *ret = NULL;
 
 hs = kzalloc(sizeof(struct o2hb_heartbeat_group), GFP_KERNEL);
 if (hs == NULL)
-goto out;
+return NULL;
 
 config_group_init_type_name(&amp;amp;hs-&amp;gt;hs_group, "heartbeat",
     &amp;amp;o2hb_heartbeat_group_type);
-
-ret = &amp;amp;hs-&amp;gt;hs_group;
-out:
-if (ret == NULL)
-kfree(hs);
-return ret;
+return &amp;amp;hs-&amp;gt;hs_group;
 }
 
 void o2hb_free_hb_set(struct config_group *group)
&lt;/pre&gt;</description>
    <dc:creator>Dan Carpenter</dc:creator>
    <dc:date>2012-02-13T13:50:47</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7821">
    <title>Maybe a null point bug in __ocfs2_change_file_space.</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7821</link>
    <description>&lt;pre&gt;Hi,
 Version linux-3.3
In function
static long ocfs2_fallocate(struct file *file, int mode, loff_t offset,
                        loff_t len)
{
…
return __ocfs2_change_file_space(NULL, inode, offset, cmd, &amp;amp;sr,           // file is NULL
                                        change_size);
}

In function
static int __ocfs2_change_file_space(struct file *file, struct inode *inode,
                                  loff_t f_pos, unsigned int cmd,
                                  struct ocfs2_space_resv *sr,
                                  int change_size)
{
if (file-&amp;gt;f_flags &amp;amp; O_SYNC)                                                                                   // access file-&amp;gt;f_flags result null pointer
           handle-&amp;gt;h_sync = 1;
}

Changlimin

-------------------------------------------------------------------------------------------------------------------------------------
本邮件及其附件含有杭州华三通信技术有限公司的保密信息，仅限于发送给上面地址中列出
的个人或群组。禁止任何其他人以任何形式使用（包括但不限于全部或部分地泄露、复制、
或散发）本邮件中的信息。如果您错收了本邮件，请您立即电话或邮件通知发件人并删除本
邮件！
This e-mail and its attachments contain confidential information from H3C, which is
intended only for the person or entity whose address is listed above. Any use of the
information contained herein in any way (including, but not limited to, total or partial
disclosure, reproduction, or dissemination) by persons other than the intended
recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
by phone or email immediately and delete it!
_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel&amp;lt; at &amp;gt;oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel&lt;/pre&gt;</description>
    <dc:creator>Chang Limin</dc:creator>
    <dc:date>2012-04-13T03:32:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7820">
    <title>Maybe a null point bug in __ocfs2_change_file_space.</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7820</link>
    <description>&lt;pre&gt;Hi,
 Version linux-3.3
In function
static long ocfs2_fallocate(struct file *file, int mode, loff_t offset,
                        loff_t len)
{
…
return __ocfs2_change_file_space(NULL, inode, offset, cmd, &amp;amp;sr,           // file is NULL
                                        change_size);
}

In function
static int __ocfs2_change_file_space(struct file *file, struct inode *inode,
                                  loff_t f_pos, unsigned int cmd,
                                  struct ocfs2_space_resv *sr,
                                  int change_size)
{
if (file-&amp;gt;f_flags &amp;amp; O_SYNC)                                                                                   // access file-&amp;gt;f_flags result null pointer
           handle-&amp;gt;h_sync = 1;
}

Changlimin
-------------------------------------------------------------------------------------------------------------------------------------
本邮件及其附件含有杭州华三通信技术有限公司的保密信息，仅限于发送给上面地址中列出
的个人或群组。禁止任何其他人以任何形式使用（包括但不限于全部或部分地泄露、复制、
或散发）本邮件中的信息。如果您错收了本邮件，请您立即电话或邮件通知发件人并删除本
邮件！
This e-mail and its attachments contain confidential information from H3C, which is
intended only for the person or entity whose address is listed above. Any use of the
information contained herein in any way (including, but not limited to, total or partial
disclosure, reproduction, or dissemination) by persons other than the intended
recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
by phone or email immediately and delete it!
_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel&amp;lt; at &amp;gt;oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel&lt;/pre&gt;</description>
    <dc:creator>Chang Limin</dc:creator>
    <dc:date>2012-04-13T07:58:28</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7799">
    <title>[PATCH 1/9] ocfs2/cluster: Fix possible null pointerdereference</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7799</link>
    <description>&lt;pre&gt;Patch fixes some possible null pointer dereferences that were detected by the
static code analyser, smatch.

Reported-by: Dan Carpenter &amp;lt;error27&amp;lt; at &amp;gt;gmail.com&amp;gt;
Signed-off-by: Sunil Mushran &amp;lt;sunil.mushran&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/cluster/tcp.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 044e7b5..bf9494d 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -546,8 +546,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void o2net_set_nn_state(struct o2net_node *nn,
 }
 
 if (was_valid &amp;amp;&amp;amp; !valid) {
-printk(KERN_NOTICE "o2net: No longer connected to "
-       SC_NODEF_FMT "\n", SC_NODEF_ARGS(old_sc));
+if (old_sc)
+printk(KERN_NOTICE "o2net: No longer connected to "
+       SC_NODEF_FMT "\n", SC_NODEF_ARGS(old_sc));
 o2net_complete_nodes_nsw(nn);
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1700,13 +1701,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void o2net_start_connect(struct work_struct *work)
 ret = 0;
 
 out:
-if (ret) {
+if (ret &amp;amp;&amp;amp; sc) {
 printk(KERN_NOTICE "o2net: Connect attempt to " SC_NODEF_FMT
        " failed with errno %d\n", SC_NODEF_ARGS(sc), ret);
 /* 0 err so that another will be queued and attempted
  * from set_nn_state */
-if (sc)
-o2net_ensure_shutdown(nn, sc, 0);
+o2net_ensure_shutdown(nn, sc, 0);
 }
 if (sc)
 sc_put(sc);
&lt;/pre&gt;</description>
    <dc:creator>Sunil Mushran</dc:creator>
    <dc:date>2012-03-01T19:34:15</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7777">
    <title>[PATCH] ocfs2: Fix bogus error message fromocfs2_global_read_info</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7777</link>
    <description>&lt;pre&gt;'status' variable in ocfs2_global_read_info() is always != 0 when leaving the
function because it happens to contain number of read bytes. Thus we always log
error message although everything is OK. Since all error cases properly call
mlog_errno() before jumping to out_err, there's no reason to call mlog_errno()
on exit at all. This is a fallout of c1e8d35e (conversion of mlog_exit()
calls).

Signed-off-by: Jan Kara &amp;lt;jack&amp;lt; at &amp;gt;suse.cz&amp;gt;
---
 fs/ocfs2/quota_global.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index 92fcd57..0a86e30 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -399,8 +399,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int ocfs2_global_read_info(struct super_block *sb, int type)
       msecs_to_jiffies(oinfo-&amp;gt;dqi_syncms));
 
 out_err:
-if (status)
-mlog_errno(status);
 return status;
 out_unlock:
 ocfs2_unlock_global_qf(oinfo, 0);
&lt;/pre&gt;</description>
    <dc:creator>Jan Kara</dc:creator>
    <dc:date>2012-02-10T09:50:07</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7774">
    <title>[PATCH] ocfs2: for SEEK_DATA/SEEK_HOLE, return internal error unchanged if ocfs2_get_clusters_nocache() or ocfs2_inode_lock() call failed.</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7774</link>
    <description>&lt;pre&gt;Hello,

Since ENXIO only means "offset beyond EOF" for SEEK_DATA/SEEK_HOLE,
Hence we should return the internal error unchanged if ocfs2_inode_lock() or
ocfs2_get_clusters_nocache() call failed rather than ENXIO.
Otherwise, it will confuse the user applications when they trying to understand the root cause.

Thanks Dave for pointing this out.

Thanks,
-Jeff


Cc: Dave Chinner &amp;lt;david&amp;lt; at &amp;gt;fromorbit.com&amp;gt;
Signed-off-by: Jie Liu &amp;lt;jeff.liu&amp;lt; at &amp;gt;oracle.com&amp;gt;

---
 fs/ocfs2/extent_map.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c
index 2f5b92e..70b5863 100644
--- a/fs/ocfs2/extent_map.c
+++ b/fs/ocfs2/extent_map.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -923,8 +923,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; out_unlock:
 
 ocfs2_inode_unlock(inode, 0);
 out:
-if (ret &amp;amp;&amp;amp; ret != -ENXIO)
-ret = -ENXIO;
 return ret;
 }
 
&lt;/pre&gt;</description>
    <dc:creator>Jeff Liu</dc:creator>
    <dc:date>2012-02-09T06:42:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7771">
    <title>[PATCH 1/1] o2dlm: fix NULL pointer dereference ino2dlm_blocking_ast_wrapper</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7771</link>
    <description>&lt;pre&gt;A tiny race between BAST and unlock message causes the NULL dereference.

A node sends an unlock request to master and receives a response. Before
processing the response it receives a BAST from the master. Since both requests
are processed by different threads it creates a race. While the BAST is being
processed, lock can get freed by unlock code.

This patch makes bast to return immediately if lock is found but unlock is
pending. The code should handle this race. We also have to fix master node to
skip sending BAST after receiving unlock message.

Below is the crash stack

BUG: unable to handle kernel NULL pointer dereference at 0000000000000048
IP: [&amp;lt;ffffffffa015e023&amp;gt;] o2dlm_blocking_ast_wrapper+0xd/0x16
[&amp;lt;ffffffffa034e3db&amp;gt;] dlm_do_local_bast+0x8e/0x97 [ocfs2_dlm]
[&amp;lt;ffffffffa034f366&amp;gt;] dlm_proxy_ast_handler+0x838/0x87e [ocfs2_dlm]
[&amp;lt;ffffffffa0308abe&amp;gt;] o2net_process_message+0x395/0x5b8 [ocfs2_nodemanager]
[&amp;lt;ffffffffa030aac8&amp;gt;] o2net_rx_until_empty+0x762/0x90d [ocfs2_nodemanager]
[&amp;lt;ffffffff81071802&amp;gt;] worker_thread+0x14d/0x1ed

Signed-off-by: Srinivas Eeda &amp;lt;srinivas.eeda&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlm/dlmast.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/ocfs2/dlm/dlmast.c b/fs/ocfs2/dlm/dlmast.c
index 3a3ed4b..1281e8a 100644
--- a/fs/ocfs2/dlm/dlmast.c
+++ b/fs/ocfs2/dlm/dlmast.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -386,8 +386,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data,
 head = &amp;amp;res-&amp;gt;granted;
 
 list_for_each(iter, head) {
+/* if lock is found but unlock is pending ignore the bast */
 lock = list_entry (iter, struct dlm_lock, list);
-if (lock-&amp;gt;ml.cookie == cookie)
+if ((lock-&amp;gt;ml.cookie == cookie) &amp;amp;&amp;amp; (!lock-&amp;gt;unlock_pending))
 goto do_ast;
 }
 
&lt;/pre&gt;</description>
    <dc:creator>Srinivas Eeda</dc:creator>
    <dc:date>2012-01-31T07:16:28</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7769">
    <title>[PATCH 1/1] ocfs2: use spinlock irqsave fordownconvert lock.patch</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7769</link>
    <description>&lt;pre&gt;When ocfs2dc thread holds dc_task_lock spinlock and receives soft IRQ it
deadlock itself trying to get same spinlock in ocfs2_wake_downconvert_thread.
Below is the stack snippet.

The patch disables interrupts when acquiring dc_task_lock spinlock.

ocfs2_wake_downconvert_thread
ocfs2_rw_unlock
ocfs2_dio_end_io
dio_complete
.....
bio_endio
req_bio_endio
....
scsi_io_completion
blk_done_softirq
__do_softirq
do_softirq
irq_exit
do_IRQ
ocfs2_downconvert_thread
[kthread]

Signed-off-by: Srinivas Eeda &amp;lt;srinivas.eeda&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlmglue.c |   31 +++++++++++++++++++------------
 1 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 81a4cd2..67af5db 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3932,6 +3932,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; unqueue:
 static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
 struct ocfs2_lock_res *lockres)
 {
+unsigned long flags;
+
 assert_spin_locked(&amp;amp;lockres-&amp;gt;l_lock);
 
 if (lockres-&amp;gt;l_flags &amp;amp; OCFS2_LOCK_FREEING) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3945,21 +3947,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
 
 lockres_or_flags(lockres, OCFS2_LOCK_QUEUED);
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (list_empty(&amp;amp;lockres-&amp;gt;l_blocked_list)) {
 list_add_tail(&amp;amp;lockres-&amp;gt;l_blocked_list,
       &amp;amp;osb-&amp;gt;blocked_lock_list);
 osb-&amp;gt;blocked_lock_count++;
 }
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
 
 static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
 {
 unsigned long processed;
+unsigned long flags;
 struct ocfs2_lock_res *lockres;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 /* grab this early so we know to try again if a state change and
  * wake happens part-way through our work  */
 osb-&amp;gt;dc_work_sequence = osb-&amp;gt;dc_wake_sequence;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3972,38 +3975,40 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
      struct ocfs2_lock_res, l_blocked_list);
 list_del_init(&amp;amp;lockres-&amp;gt;l_blocked_list);
 osb-&amp;gt;blocked_lock_count--;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 
 BUG_ON(!processed);
 processed--;
 
 ocfs2_process_blocked_lock(osb, lockres);
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
 
 static int ocfs2_downconvert_thread_lists_empty(struct ocfs2_super *osb)
 {
 int empty = 0;
+unsigned long flags;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (list_empty(&amp;amp;osb-&amp;gt;blocked_lock_list))
 empty = 1;
 
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 return empty;
 }
 
 static int ocfs2_downconvert_thread_should_wake(struct ocfs2_super *osb)
 {
 int should_wake = 0;
+unsigned long flags;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (osb-&amp;gt;dc_work_sequence != osb-&amp;gt;dc_wake_sequence)
 should_wake = 1;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 
 return should_wake;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4033,10 +4038,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int ocfs2_downconvert_thread(void *arg)
 
 void ocfs2_wake_downconvert_thread(struct ocfs2_super *osb)
 {
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+unsigned long flags;
+
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 /* make sure the voting thread gets a swipe at whatever changes
  * the caller may have made to the voting state */
 osb-&amp;gt;dc_wake_sequence++;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 wake_up(&amp;amp;osb-&amp;gt;dc_event);
 }
&lt;/pre&gt;</description>
    <dc:creator>Srinivas Eeda</dc:creator>
    <dc:date>2012-01-31T05:51:22</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7768">
    <title>[PATCH 1/1] ocfs2: use spinlock irqsave fordownconvert lock.patch</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7768</link>
    <description>&lt;pre&gt;When ocfs2dc thread holds dc_task_lock spinlock and receives soft IRQ it
deadlock itself trying to get same spinlock in ocfs2_wake_downconvert_thread.
Below is the stack snippet.

The patch disables interrupts when acquiring dc_task_lock spinlock.

ocfs2_wake_downconvert_thread
ocfs2_rw_unlock
ocfs2_dio_end_io
dio_complete
.....
bio_endio
req_bio_endio
....
scsi_io_completion
blk_done_softirq
__do_softirq
do_softirq
irq_exit
do_IRQ
ocfs2_downconvert_thread
[kthread]

Signed-off-by: Srinivas Eeda &amp;lt;srinivas.eeda&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlmglue.c |   30 ++++++++++++++++++------------
 1 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 81a4cd2..d8552a5 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3932,6 +3932,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; unqueue:
 static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
 struct ocfs2_lock_res *lockres)
 {
+unsigned long flags;
+
 assert_spin_locked(&amp;amp;lockres-&amp;gt;l_lock);
 
 if (lockres-&amp;gt;l_flags &amp;amp; OCFS2_LOCK_FREEING) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3945,21 +3947,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
 
 lockres_or_flags(lockres, OCFS2_LOCK_QUEUED);
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (list_empty(&amp;amp;lockres-&amp;gt;l_blocked_list)) {
 list_add_tail(&amp;amp;lockres-&amp;gt;l_blocked_list,
       &amp;amp;osb-&amp;gt;blocked_lock_list);
 osb-&amp;gt;blocked_lock_count++;
 }
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
 
 static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
 {
 unsigned long processed;
+unsigned long flags;
 struct ocfs2_lock_res *lockres;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 /* grab this early so we know to try again if a state change and
  * wake happens part-way through our work  */
 osb-&amp;gt;dc_work_sequence = osb-&amp;gt;dc_wake_sequence;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3972,38 +3975,40 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
      struct ocfs2_lock_res, l_blocked_list);
 list_del_init(&amp;amp;lockres-&amp;gt;l_blocked_list);
 osb-&amp;gt;blocked_lock_count--;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 
 BUG_ON(!processed);
 processed--;
 
 ocfs2_process_blocked_lock(osb, lockres);
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
 
 static int ocfs2_downconvert_thread_lists_empty(struct ocfs2_super *osb)
 {
 int empty = 0;
+unsigned long flags;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (list_empty(&amp;amp;osb-&amp;gt;blocked_lock_list))
 empty = 1;
 
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 return empty;
 }
 
 static int ocfs2_downconvert_thread_should_wake(struct ocfs2_super *osb)
 {
 int should_wake = 0;
+unsigned long flags;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (osb-&amp;gt;dc_work_sequence != osb-&amp;gt;dc_wake_sequence)
 should_wake = 1;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 
 return should_wake;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4033,10 +4038,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int ocfs2_downconvert_thread(void *arg)
 
 void ocfs2_wake_downconvert_thread(struct ocfs2_super *osb)
 {
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+unsigned long flags;
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 /* make sure the voting thread gets a swipe at whatever changes
  * the caller may have made to the voting state */
 osb-&amp;gt;dc_wake_sequence++;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 wake_up(&amp;amp;osb-&amp;gt;dc_event);
 }
&lt;/pre&gt;</description>
    <dc:creator>Srinivas Eeda</dc:creator>
    <dc:date>2012-01-31T05:47:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7766">
    <title>[PATCH 1/1] ocfs2: Fix oops in fallocate()</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7766</link>
    <description>&lt;pre&gt;fallocate() was oopsing on ocfs2 because we were passing in a
NULL file pointer.

Signed-off-by: Sunil Mushran &amp;lt;sunil.mushran&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/file.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 061591a..8f30e74 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2012,7 +2012,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static long ocfs2_fallocate(struct file *file, int mode, loff_t offset,
 sr.l_start = (s64)offset;
 sr.l_len = (s64)len;
 
-return __ocfs2_change_file_space(NULL, inode, offset, cmd, &amp;amp;sr,
+return __ocfs2_change_file_space(file, inode, offset, cmd, &amp;amp;sr,
  change_size);
 }
 
&lt;/pre&gt;</description>
    <dc:creator>Sunil Mushran</dc:creator>
    <dc:date>2012-01-30T21:53:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7762">
    <title>[PATCH 1/1] ocfs2: use spinlock irqsave fordownconvert lock.patch</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7762</link>
    <description>&lt;pre&gt;When ocfs2dc thread holds dc_task_lock spinlock and receives soft IRQ for
I/O completion it deadlock itself trying to get same spinlock in
ocfs2_wake_downconvert_thread

The patch disables interrupts when acquiring dc_task_lock spinlock

Signed-off-by: Srinivas Eeda &amp;lt;srinivas.eeda&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlmglue.c |   30 ++++++++++++++++++------------
 1 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 81a4cd2..d8552a5 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3932,6 +3932,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; unqueue:
 static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
 struct ocfs2_lock_res *lockres)
 {
+unsigned long flags;
+
 assert_spin_locked(&amp;amp;lockres-&amp;gt;l_lock);
 
 if (lockres-&amp;gt;l_flags &amp;amp; OCFS2_LOCK_FREEING) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3945,21 +3947,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
 
 lockres_or_flags(lockres, OCFS2_LOCK_QUEUED);
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (list_empty(&amp;amp;lockres-&amp;gt;l_blocked_list)) {
 list_add_tail(&amp;amp;lockres-&amp;gt;l_blocked_list,
       &amp;amp;osb-&amp;gt;blocked_lock_list);
 osb-&amp;gt;blocked_lock_count++;
 }
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
 
 static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
 {
 unsigned long processed;
+unsigned long flags;
 struct ocfs2_lock_res *lockres;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 /* grab this early so we know to try again if a state change and
  * wake happens part-way through our work  */
 osb-&amp;gt;dc_work_sequence = osb-&amp;gt;dc_wake_sequence;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3972,38 +3975,40 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
      struct ocfs2_lock_res, l_blocked_list);
 list_del_init(&amp;amp;lockres-&amp;gt;l_blocked_list);
 osb-&amp;gt;blocked_lock_count--;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 
 BUG_ON(!processed);
 processed--;
 
 ocfs2_process_blocked_lock(osb, lockres);
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 }
 
 static int ocfs2_downconvert_thread_lists_empty(struct ocfs2_super *osb)
 {
 int empty = 0;
+unsigned long flags;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (list_empty(&amp;amp;osb-&amp;gt;blocked_lock_list))
 empty = 1;
 
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 return empty;
 }
 
 static int ocfs2_downconvert_thread_should_wake(struct ocfs2_super *osb)
 {
 int should_wake = 0;
+unsigned long flags;
 
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 if (osb-&amp;gt;dc_work_sequence != osb-&amp;gt;dc_wake_sequence)
 should_wake = 1;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 
 return should_wake;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4033,10 +4038,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int ocfs2_downconvert_thread(void *arg)
 
 void ocfs2_wake_downconvert_thread(struct ocfs2_super *osb)
 {
-spin_lock(&amp;amp;osb-&amp;gt;dc_task_lock);
+unsigned long flags;
+spin_lock_irqsave(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 /* make sure the voting thread gets a swipe at whatever changes
  * the caller may have made to the voting state */
 osb-&amp;gt;dc_wake_sequence++;
-spin_unlock(&amp;amp;osb-&amp;gt;dc_task_lock);
+spin_unlock_irqrestore(&amp;amp;osb-&amp;gt;dc_task_lock, flags);
 wake_up(&amp;amp;osb-&amp;gt;dc_event);
 }
&lt;/pre&gt;</description>
    <dc:creator>Srinivas Eeda</dc:creator>
    <dc:date>2012-01-29T02:13:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7757">
    <title>Question about incorrect free bits setting</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7757</link>
    <description>&lt;pre&gt;We have a customer who was running into read-only filesystem because
of incorrect free bits set/calculation. We have provided the fix from
here, which avoids the read-only problem
http://oss.oracle.com/pipermail/ocfs2-devel/2011-November/008431.html

Though the filesystem is does not turn read-only, we still get messages like -

[ 5017.452846] (ocfs2_wq,8480,0):ocfs2_block_group_clear_bits:2113
ERROR: Trying to clear 1 bits at offset 7658 in group descriptor #
7644672 (device cciss/c0d0p3), needed to clear 0 bits

We are investigating how the bits get free in the first place because
another allocation could claim the bits marked as free.

The question is:

Why does ocfs2_release_clusters has ocfs2_clear_bit as the undo
function wheras ocfs2_free_clusters has ocfs2_set_bit as the undo
function? Should it be NULL for ocfs2_release_clusters?

&lt;/pre&gt;</description>
    <dc:creator>Goldwyn Rodrigues</dc:creator>
    <dc:date>2012-01-18T18:00:15</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7756">
    <title>pull request</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7756</link>
    <description>&lt;pre&gt;Joel,

Please pull 6 patches (bug fixes) from the following repo.

git://oss.oracle.com/git/smushran/linux-2.6.git  mw-3.3-jan13

BTW, not sure if I emailed before but we have to rollback 3 patches
related to deletes. These patches were added to fix deadlocks with
quotas. Well, it has just broken deletes. Srini has the list. We'll
have to find another way to fix the quotas deadlock.

Sunil

_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel&amp;lt; at &amp;gt;oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel&lt;/pre&gt;</description>
    <dc:creator>Sunil Mushran</dc:creator>
    <dc:date>2012-01-13T22:08:17</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7754">
    <title>ltp hugemmap02 fails on ocfs2</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7754</link>
    <description>&lt;pre&gt;Hi Tiger,

ltp-20120104 hugemmap02 testcase fails on ocfs2 filesystem with both UEK 
2.6.39-100.0.18 and RHEL 2.6.18-300.el5:

hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory
hugemmap02    1  TCONF  :  huge mmap failed to test the scenario
hugemmap02    0  TWARN  :  tst_rmdir: 
rmobj(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed: 
lstat(/mnt/ocfs2/ltp-mQdlAx5411/hugSJXB0B) failed; errno=2: No such file 
or directory

Could you help to investigate on this?

Thanks
Simon
&lt;/pre&gt;</description>
    <dc:creator>Simon Xu</dc:creator>
    <dc:date>2012-01-10T15:48:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7746">
    <title>Gentoo 3.1.5 and ocfs2 1.6.4 instability</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7746</link>
    <description>&lt;pre&gt;Hi,

I saw the posting from Marek regarding the kernel oops after many reads
and writes.  I saw another posting in the users group where someone
simply changed their kernel to a vanilla 3.1.6 and the problem went
away.  Can anyone confirm that this change corrects the problem?

Thanks,
Bill
&lt;/pre&gt;</description>
    <dc:creator>William Fuller</dc:creator>
    <dc:date>2011-12-28T13:15:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7744">
    <title>[PATCH][ocfs2/dlm] fix dlm_clean_master_list -V2</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7744</link>
    <description>&lt;pre&gt;This is a fix on dlm_clean_master_list()

During the hash table browsing, we remove mle from hash table then free
the memory on the last reference. So we have to use a _safe() version
of the browsing function when doing that.

This fixes Orabug #12798517

Signed-off-by: Wengang Wang &amp;lt;wen.gang.wang&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlm/dlmmaster.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 11eefb8..86ec9d2 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3182,7 +3182,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void dlm_clean_master_list(struct dlm_ctxt *dlm, u8 dead_node)
 struct dlm_master_list_entry *mle;
 struct dlm_lock_resource *res;
 struct hlist_head *bucket;
-struct hlist_node *list;
+struct hlist_node *list, *tmp;
 unsigned int i;
 
 mlog(0, "dlm=%s, dead node=%u\n", dlm-&amp;gt;name, dead_node);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3193,7 +3193,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; top:
 spin_lock(&amp;amp;dlm-&amp;gt;master_lock);
 for (i = 0; i &amp;lt; DLM_HASH_BUCKETS; i++) {
 bucket = dlm_master_hash(dlm, i);
-hlist_for_each(list, bucket) {
+hlist_for_each_safe(list, tmp, bucket) {
 mle = hlist_entry(list, struct dlm_master_list_entry,
   master_hash_node);
 
&lt;/pre&gt;</description>
    <dc:creator>Wengang Wang</dc:creator>
    <dc:date>2011-12-23T03:21:54</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7742">
    <title>[CFP] Linux Storage, Filesystem &amp; Memory Management Summit 2012 (April 1-2)</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7742</link>
    <description>&lt;pre&gt;The annual Linux Storage, Filesystem and Memory Management Summit for
2012 will be held on the 2 days preceding the Linux Foundation
Collaboration Summit at Hotel Nikko in San Francisco, CA:

https://events.linuxfoundation.org/events/lsfmm-summit
https://events.linuxfoundation.org/events/collaboration-summit/

We'd therefore like to issue a call for agenda proposals that are
suitable for cross-track discussion as well as more technical subjects
for discussion in the breakout sessions.

1) Suggestions for agenda topics should be sent before February 5th
2012 to:

lsf-pc&amp;lt; at &amp;gt;lists.linux-foundation.org

and optionally cc the Linux list which would be most interested in it:

SCSI: linux-scsi&amp;lt; at &amp;gt;vger.kernel.org
FS: linux-fsdevel&amp;lt; at &amp;gt;vger.kernel.org
MM: linux-mm&amp;lt; at &amp;gt;kvack.org

Please remember to tag your subject with [LSF/MM TOPIC] to make it
easier to track. Agenda topics and attendees will be selected by the
programme committee, but the final agenda will be formed by consensus
of the attendees on the day.

We'll try to cap attendance at around 25-30 per track to facilitate
discussions although the final numbers will depend on the room sizes at
the venue.

2) Requests to attend should be sent to:

lsf-pc&amp;lt; at &amp;gt;lists.linux-foundation.org

please summarize what expertise you will bring to the meeting, and what
you'd like to discuss.  please also tag your email with [ATTEND] so
there's less chance of it getting lost in the large mail pile.

Presentations are allowed to guide discussion, but are strongly
discouraged.  There will be no recording or audio bridge, however
written minutes will be published as in previous years:

2011:

http://lwn.net/Articles/436871/
http://lwn.net/Articles/437066/

2010:
http://lwn.net/Articles/399148/
http://lwn.net/Articles/399313/
http://lwn.net/Articles/400589/

2009:
http://lwn.net/Articles/327601/
http://lwn.net/Articles/327740/
http://lwn.net/Articles/328347/

Prior years:
http://www.usenix.org/events/lsf08/tech/lsf08sums.pdf
http://www.usenix.org/publications/login/2007-06/openpdfs/lsf07sums.pdf

3) If you have feedback on last year's meeting that we can use to
improve this year's, please also send that to:

lsf-pc&amp;lt; at &amp;gt;lists.linux-foundation.org

Thank you on behalf of the Program Committee:

Storage

Jens Axboe
James Bottomley
Vivek Goyal
Dan Williams

Filesystems

Trond Myklebust
Chris Mason
Christoph Hellwig
Theodore Ts'o
Mingming Cao
Jan Kara
Joel Becker

MM

Andrea Arcangeli
Hugh Dickins
Mel Gorman
&lt;/pre&gt;</description>
    <dc:creator>Joel Becker</dc:creator>
    <dc:date>2011-12-22T13:53:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7741">
    <title>[PATCH][ocfs2/dlm] fix dlm_clean_master_list</title>
    <link>http://comments.gmane.org/gmane.comp.file-systems.ocfs2.devel/7741</link>
    <description>&lt;pre&gt;This is a fix on dlm_clean_master_list()

During the hash table browsing, we remove mle from hash table then free
the memory on the last reference. So we have to use a _safe() version
of the browsing function when doing that.

This fixes Orabug #12798517

Signed-off-by: Wengang Wang &amp;lt;wen.gang.wang&amp;lt; at &amp;gt;oracle.com&amp;gt;
---
 fs/ocfs2/dlm/dlmmaster.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 11eefb8..86ec9d2 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3182,7 +3182,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void dlm_clean_master_list(struct dlm_ctxt *dlm, u8 dead_node)
 struct dlm_master_list_entry *mle;
 struct dlm_lock_resource *res;
 struct hlist_head *bucket;
-struct hlist_node *list;
+struct hlist_node *list, *n;
 unsigned int i;
 
 mlog(0, "dlm=%s, dead node=%u\n", dlm-&amp;gt;name, dead_node);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3193,7 +3193,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; top:
 spin_lock(&amp;amp;dlm-&amp;gt;master_lock);
 for (i = 0; i &amp;lt; DLM_HASH_BUCKETS; i++) {
 bucket = dlm_master_hash(dlm, i);
-hlist_for_each(list, bucket) {
+hlist_for_each_safe(list, n, bucket) {
 mle = hlist_entry(list, struct dlm_master_list_entry,
   master_hash_node);
 
&lt;/pre&gt;</description>
    <dc:creator>Wengang Wang</dc:creator>
    <dc:date>2011-12-21T02:49:29</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.file-systems.ocfs2.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.file-systems.ocfs2.devel</link>
  </textinput>
</rdf:RDF>

