All of lore.kernel.org
 help / color / mirror / Atom feed
* [Ocfs2-devel] ocfs2: fix recursive locking deadlock
@ 2016-05-10  4:53 Junxiao Bi
  2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang Junxiao Bi
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Junxiao Bi @ 2016-05-10  4:53 UTC (permalink / raw)
  To: ocfs2-devel


Hi,

These two patches is to fix recursive locking deadlock issues. As we
talked with Mark before, recursive locking is not allowed in ocfs2,
so these two patches fixes the deadlock issue with reverting back
patches to avoid recursive locking. Please review.

Thanks,
Junxiao.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Ocfs2-devel] [PATCH 1/2] ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang
  2016-05-10  4:53 [Ocfs2-devel] ocfs2: fix recursive locking deadlock Junxiao Bi
@ 2016-05-10  4:53 ` Junxiao Bi
  2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: fix posix_acl_create deadlock Junxiao Bi
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Junxiao Bi @ 2016-05-10  4:53 UTC (permalink / raw)
  To: ocfs2-devel

commit 743b5f1434f5 ("ocfs2: take inode lock in ocfs2_iop_set/get_acl()")
introduced this issue.  ocfs2_setattr called by chmod command holds cluster
wide inode lock when calling posix_acl_chmod. This latter function in turn
calls ocfs2_iop_get_acl and ocfs2_iop_set_acl.  These two are also called
directly from vfs layer for getfacl/setfacl commands and therefore acquire
the cluster wide inode lock. If a remote conversion request comes after the
first inode lock in ocfs2_setattr, OCFS2_LOCK_BLOCKED will be set. And this
will cause the second call to inode lock from the ocfs2_iop_get_acl() to
block indefinetly.

The deleted version of ocfs2_acl_chmod() calls __posix_acl_chmod() which
does not call back into the filesystem. Therefore, we restore
ocfs2_acl_chmod(), modify it slightly for locking as needed, and use that
instead.

Fixes: 743b5f1434f5 ("ocfs2: take inode lock in ocfs2_iop_set/get_acl()")
Signed-off-by: Tariq Saeed <tariq.x.saeed@oracle.com>
Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
---
 fs/ocfs2/acl.c  |   24 ++++++++++++++++++++++++
 fs/ocfs2/acl.h  |    1 +
 fs/ocfs2/file.c |    4 ++--
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
index 0cdf497c91ef..749d3bc41232 100644
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -322,3 +322,27 @@ struct posix_acl *ocfs2_iop_get_acl(struct inode *inode, int type)
 	brelse(di_bh);
 	return acl;
 }
+
+int ocfs2_acl_chmod(struct inode *inode, struct buffer_head *bh)
+{
+	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
+	struct posix_acl *acl;
+	int ret;
+
+	if (S_ISLNK(inode->i_mode))
+		return -EOPNOTSUPP;
+
+	if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
+		return 0;
+
+	acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, bh);
+	if (IS_ERR(acl) || !acl)
+		return PTR_ERR(acl);
+	ret = __posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode);
+	if (ret)
+		return ret;
+	ret = ocfs2_set_acl(NULL, inode, NULL, ACL_TYPE_ACCESS,
+			    acl, NULL, NULL);
+	posix_acl_release(acl);
+	return ret;
+}
diff --git a/fs/ocfs2/acl.h b/fs/ocfs2/acl.h
index 3fce68d08625..035e5878db06 100644
--- a/fs/ocfs2/acl.h
+++ b/fs/ocfs2/acl.h
@@ -35,5 +35,6 @@ int ocfs2_set_acl(handle_t *handle,
 			 struct posix_acl *acl,
 			 struct ocfs2_alloc_context *meta_ac,
 			 struct ocfs2_alloc_context *data_ac);
+extern int ocfs2_acl_chmod(struct inode *, struct buffer_head *);
 
 #endif /* OCFS2_ACL_H */
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 2bf23fd333ed..4e7b0dc22450 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -1268,20 +1268,20 @@ bail_unlock_rw:
 	if (size_change)
 		ocfs2_rw_unlock(inode, 1);
 bail:
-	brelse(bh);
 
 	/* Release quota pointers in case we acquired them */
 	for (qtype = 0; qtype < OCFS2_MAXQUOTAS; qtype++)
 		dqput(transfer_to[qtype]);
 
 	if (!status && attr->ia_valid & ATTR_MODE) {
-		status = posix_acl_chmod(inode, inode->i_mode);
+		status = ocfs2_acl_chmod(inode, bh);
 		if (status < 0)
 			mlog_errno(status);
 	}
 	if (inode_locked)
 		ocfs2_inode_unlock(inode, 1);
 
+	brelse(bh);
 	return status;
 }
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Ocfs2-devel] [PATCH 2/2] ocfs2: fix posix_acl_create deadlock
  2016-05-10  4:53 [Ocfs2-devel] ocfs2: fix recursive locking deadlock Junxiao Bi
  2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang Junxiao Bi
@ 2016-05-10  4:53 ` Junxiao Bi
  2016-05-10  5:58 ` [Ocfs2-devel] ocfs2: fix recursive locking deadlock Andrew Morton
  2016-05-14 16:56 ` Jeong Woo Seo
  3 siblings, 0 replies; 7+ messages in thread
From: Junxiao Bi @ 2016-05-10  4:53 UTC (permalink / raw)
  To: ocfs2-devel

commit 702e5bc68ad2 ("ocfs2: use generic posix ACL infrastructure")
refactored code to use posix_acl_create. The problem with this function
is that it is not mindful of the cluster wide inode lock making it
unsuitable for use with ocfs2 inode creation with ACLs. For example,
when used in ocfs2_mknod, this function can cause deadlock as follows.
The parent dir inode lock is taken when calling posix_acl_create ->
get_acl -> ocfs2_iop_get_acl which takes the inode lock again. This can
cause deadlock if there is a blocked remote lock request waiting for the
lock to be downconverted. And same deadlock happened in ocfs2_reflink.
This fix is to revert back using ocfs2_init_acl.

Fixes: 702e5bc68ad2 ("ocfs2: use generic posix ACL infrastructure")
Signed-off-by: Tariq Saeed <tariq.x.saeed@oracle.com>
Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
---
 fs/ocfs2/acl.c          |   63 +++++++++++++++++++++++++++++++++++++++++++++++
 fs/ocfs2/acl.h          |    4 +++
 fs/ocfs2/namei.c        |   23 ++---------------
 fs/ocfs2/refcounttree.c |   17 ++-----------
 fs/ocfs2/xattr.c        |   14 ++++-------
 fs/ocfs2/xattr.h        |    4 +--
 6 files changed, 77 insertions(+), 48 deletions(-)

diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
index 749d3bc41232..2162434728c0 100644
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -346,3 +346,66 @@ int ocfs2_acl_chmod(struct inode *inode, struct buffer_head *bh)
 	posix_acl_release(acl);
 	return ret;
 }
+
+/*
+ * Initialize the ACLs of a new inode. If parent directory has default ACL,
+ * then clone to new inode. Called from ocfs2_mknod.
+ */
+int ocfs2_init_acl(handle_t *handle,
+		   struct inode *inode,
+		   struct inode *dir,
+		   struct buffer_head *di_bh,
+		   struct buffer_head *dir_bh,
+		   struct ocfs2_alloc_context *meta_ac,
+		   struct ocfs2_alloc_context *data_ac)
+{
+	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
+	struct posix_acl *acl = NULL;
+	int ret = 0, ret2;
+	umode_t mode;
+
+	if (!S_ISLNK(inode->i_mode)) {
+		if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) {
+			acl = ocfs2_get_acl_nolock(dir, ACL_TYPE_DEFAULT,
+						   dir_bh);
+			if (IS_ERR(acl))
+				return PTR_ERR(acl);
+		}
+		if (!acl) {
+			mode = inode->i_mode & ~current_umask();
+			ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
+			if (ret) {
+				mlog_errno(ret);
+				goto cleanup;
+			}
+		}
+	}
+	if ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) && acl) {
+		if (S_ISDIR(inode->i_mode)) {
+			ret = ocfs2_set_acl(handle, inode, di_bh,
+					    ACL_TYPE_DEFAULT, acl,
+					    meta_ac, data_ac);
+			if (ret)
+				goto cleanup;
+		}
+		mode = inode->i_mode;
+		ret = __posix_acl_create(&acl, GFP_NOFS, &mode);
+		if (ret < 0)
+			return ret;
+
+		ret2 = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
+		if (ret2) {
+			mlog_errno(ret2);
+			ret = ret2;
+			goto cleanup;
+		}
+		if (ret > 0) {
+			ret = ocfs2_set_acl(handle, inode,
+					    di_bh, ACL_TYPE_ACCESS,
+					    acl, meta_ac, data_ac);
+		}
+	}
+cleanup:
+	posix_acl_release(acl);
+	return ret;
+}
diff --git a/fs/ocfs2/acl.h b/fs/ocfs2/acl.h
index 035e5878db06..2783a75b3999 100644
--- a/fs/ocfs2/acl.h
+++ b/fs/ocfs2/acl.h
@@ -36,5 +36,9 @@ int ocfs2_set_acl(handle_t *handle,
 			 struct ocfs2_alloc_context *meta_ac,
 			 struct ocfs2_alloc_context *data_ac);
 extern int ocfs2_acl_chmod(struct inode *, struct buffer_head *);
+extern int ocfs2_init_acl(handle_t *, struct inode *, struct inode *,
+			  struct buffer_head *, struct buffer_head *,
+			  struct ocfs2_alloc_context *,
+			  struct ocfs2_alloc_context *);
 
 #endif /* OCFS2_ACL_H */
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 6b3e87189a64..a8f1225e6d9b 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -259,7 +259,6 @@ static int ocfs2_mknod(struct inode *dir,
 	struct ocfs2_dir_lookup_result lookup = { NULL, };
 	sigset_t oldset;
 	int did_block_signals = 0;
-	struct posix_acl *default_acl = NULL, *acl = NULL;
 	struct ocfs2_dentry_lock *dl = NULL;
 
 	trace_ocfs2_mknod(dir, dentry, dentry->d_name.len, dentry->d_name.name,
@@ -367,12 +366,6 @@ static int ocfs2_mknod(struct inode *dir,
 		goto leave;
 	}
 
-	status = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl);
-	if (status) {
-		mlog_errno(status);
-		goto leave;
-	}
-
 	handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb,
 							    S_ISDIR(mode),
 							    xattr_credits));
@@ -421,16 +414,8 @@ static int ocfs2_mknod(struct inode *dir,
 		inc_nlink(dir);
 	}
 
-	if (default_acl) {
-		status = ocfs2_set_acl(handle, inode, new_fe_bh,
-				       ACL_TYPE_DEFAULT, default_acl,
-				       meta_ac, data_ac);
-	}
-	if (!status && acl) {
-		status = ocfs2_set_acl(handle, inode, new_fe_bh,
-				       ACL_TYPE_ACCESS, acl,
-				       meta_ac, data_ac);
-	}
+	status = ocfs2_init_acl(handle, inode, dir, new_fe_bh, parent_fe_bh,
+			 meta_ac, data_ac);
 
 	if (status < 0) {
 		mlog_errno(status);
@@ -472,10 +457,6 @@ static int ocfs2_mknod(struct inode *dir,
 	d_instantiate(dentry, inode);
 	status = 0;
 leave:
-	if (default_acl)
-		posix_acl_release(default_acl);
-	if (acl)
-		posix_acl_release(acl);
 	if (status < 0 && did_quota_inode)
 		dquot_free_inode(inode);
 	if (handle)
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
index 744d5d90c363..92bbe93bfe10 100644
--- a/fs/ocfs2/refcounttree.c
+++ b/fs/ocfs2/refcounttree.c
@@ -4248,20 +4248,12 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
 	struct inode *inode = d_inode(old_dentry);
 	struct buffer_head *old_bh = NULL;
 	struct inode *new_orphan_inode = NULL;
-	struct posix_acl *default_acl, *acl;
-	umode_t mode;
 
 	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)))
 		return -EOPNOTSUPP;
 
-	mode = inode->i_mode;
-	error = posix_acl_create(dir, &mode, &default_acl, &acl);
-	if (error) {
-		mlog_errno(error);
-		return error;
-	}
 
-	error = ocfs2_create_inode_in_orphan(dir, mode,
+	error = ocfs2_create_inode_in_orphan(dir, inode->i_mode,
 					     &new_orphan_inode);
 	if (error) {
 		mlog_errno(error);
@@ -4300,16 +4292,11 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
 	/* If the security isn't preserved, we need to re-initialize them. */
 	if (!preserve) {
 		error = ocfs2_init_security_and_acl(dir, new_orphan_inode,
-						    &new_dentry->d_name,
-						    default_acl, acl);
+						    &new_dentry->d_name);
 		if (error)
 			mlog_errno(error);
 	}
 out:
-	if (default_acl)
-		posix_acl_release(default_acl);
-	if (acl)
-		posix_acl_release(acl);
 	if (!error) {
 		error = ocfs2_mv_orphaned_inode_to_new(dir, new_orphan_inode,
 						       new_dentry);
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 72eef4cfe8a9..ad16995c9e7a 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -7216,12 +7216,10 @@ out:
  */
 int ocfs2_init_security_and_acl(struct inode *dir,
 				struct inode *inode,
-				const struct qstr *qstr,
-				struct posix_acl *default_acl,
-				struct posix_acl *acl)
+				const struct qstr *qstr)
 {
-	struct buffer_head *dir_bh = NULL;
 	int ret = 0;
+	struct buffer_head *dir_bh = NULL;
 
 	ret = ocfs2_init_security_get(inode, dir, qstr, NULL);
 	if (ret) {
@@ -7234,11 +7232,9 @@ int ocfs2_init_security_and_acl(struct inode *dir,
 		mlog_errno(ret);
 		goto leave;
 	}
-
-	if (!ret && default_acl)
-		ret = ocfs2_iop_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
-	if (!ret && acl)
-		ret = ocfs2_iop_set_acl(inode, acl, ACL_TYPE_ACCESS);
+	ret = ocfs2_init_acl(NULL, inode, dir, NULL, dir_bh, NULL, NULL);
+	if (ret)
+		mlog_errno(ret);
 
 	ocfs2_inode_unlock(dir, 0);
 	brelse(dir_bh);
diff --git a/fs/ocfs2/xattr.h b/fs/ocfs2/xattr.h
index f10d5b93c366..1633cc15ea1f 100644
--- a/fs/ocfs2/xattr.h
+++ b/fs/ocfs2/xattr.h
@@ -94,7 +94,5 @@ int ocfs2_reflink_xattrs(struct inode *old_inode,
 			 bool preserve_security);
 int ocfs2_init_security_and_acl(struct inode *dir,
 				struct inode *inode,
-				const struct qstr *qstr,
-				struct posix_acl *default_acl,
-				struct posix_acl *acl);
+				const struct qstr *qstr);
 #endif /* OCFS2_XATTR_H */
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Ocfs2-devel] ocfs2: fix recursive locking deadlock
  2016-05-10  4:53 [Ocfs2-devel] ocfs2: fix recursive locking deadlock Junxiao Bi
  2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang Junxiao Bi
  2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: fix posix_acl_create deadlock Junxiao Bi
@ 2016-05-10  5:58 ` Andrew Morton
  2016-05-10  6:10   ` Junxiao Bi
  2016-05-14 16:56 ` Jeong Woo Seo
  3 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2016-05-10  5:58 UTC (permalink / raw)
  To: ocfs2-devel

On Tue, 10 May 2016 12:53:41 +0800 Junxiao Bi <junxiao.bi@oracle.com> wrote:

> These two patches is to fix recursive locking deadlock issues. As we
> talked with Mark before, recursive locking is not allowed in ocfs2,
> so these two patches fixes the deadlock issue with reverting back
> patches to avoid recursive locking. Please review.

2-3 years old so I guess it isn't a huge issue.  Did you consider
backporting into -stable kernels?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Ocfs2-devel] ocfs2: fix recursive locking deadlock
  2016-05-10  5:58 ` [Ocfs2-devel] ocfs2: fix recursive locking deadlock Andrew Morton
@ 2016-05-10  6:10   ` Junxiao Bi
  2016-05-10  6:50     ` Andrew Morton
  0 siblings, 1 reply; 7+ messages in thread
From: Junxiao Bi @ 2016-05-10  6:10 UTC (permalink / raw)
  To: ocfs2-devel

On 05/10/2016 01:58 PM, Andrew Morton wrote:
> On Tue, 10 May 2016 12:53:41 +0800 Junxiao Bi <junxiao.bi@oracle.com> wrote:
> 
>> These two patches is to fix recursive locking deadlock issues. As we
>> talked with Mark before, recursive locking is not allowed in ocfs2,
>> so these two patches fixes the deadlock issue with reverting back
>> patches to avoid recursive locking. Please review.
> 
> 2-3 years old so I guess it isn't a huge issue.  Did you consider
> backporting into -stable kernels?
> 
We'd better do that. I reproduced every one in my test env.

Thanks,
Junxiao.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Ocfs2-devel] ocfs2: fix recursive locking deadlock
  2016-05-10  6:10   ` Junxiao Bi
@ 2016-05-10  6:50     ` Andrew Morton
  0 siblings, 0 replies; 7+ messages in thread
From: Andrew Morton @ 2016-05-10  6:50 UTC (permalink / raw)
  To: ocfs2-devel

On Tue, 10 May 2016 14:10:43 +0800 Junxiao Bi <junxiao.bi@oracle.com> wrote:

> On 05/10/2016 01:58 PM, Andrew Morton wrote:
> > On Tue, 10 May 2016 12:53:41 +0800 Junxiao Bi <junxiao.bi@oracle.com> wrote:
> > 
> >> These two patches is to fix recursive locking deadlock issues. As we
> >> talked with Mark before, recursive locking is not allowed in ocfs2,
> >> so these two patches fixes the deadlock issue with reverting back
> >> patches to avoid recursive locking. Please review.
> > 
> > 2-3 years old so I guess it isn't a huge issue.  Did you consider
> > backporting into -stable kernels?
> > 
> We'd better do that. I reproduced every one in my test env.

OK, I added the cc:stable tags to the changelogs.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Ocfs2-devel] ocfs2: fix recursive locking deadlock
  2016-05-10  4:53 [Ocfs2-devel] ocfs2: fix recursive locking deadlock Junxiao Bi
                   ` (2 preceding siblings ...)
  2016-05-10  5:58 ` [Ocfs2-devel] ocfs2: fix recursive locking deadlock Andrew Morton
@ 2016-05-14 16:56 ` Jeong Woo Seo
  3 siblings, 0 replies; 7+ messages in thread
From: Jeong Woo Seo @ 2016-05-14 16:56 UTC (permalink / raw)
  To: ocfs2-devel

  I applied patch and when try to trim ocfs2 volume, it turns to read-only status.
 
log is :
 
[114572.044443] OCFS2: ERROR (device drbd0): ocfs2_validate_gd_self: Group descriptor #8257536 has bad signature
[114572.044501] On-disk corruption discovered. Please run fsck.ocfs2 once the filesystem is unmounted.
[114572.044528] OCFS2: File system is now read-only.
[114572.044544] (fstrim,9432,1):ocfs2_trim_fs:7399 ERROR: status = -30

  


 ??? ???? XS INC. ? ? ?  ? ? ?  / ? ? ?/ Seo Jeong Woo
??? ??? ??3? 197-5 ??IT?? 1004?
Mobile 010-3896-9002 / Office 02-2088-3243
 FAX  02-2039-3076 / E-mail seo at xsinc.co.kr 
  
-----Original Message-----
From: "Junxiao Bi"&lt;junxiao.bi at oracle.com&gt; 
To: &lt;ocfs2-devel at oss.oracle.com&gt;; &lt;akpm at linux-foundation.org&gt;; 
Cc: &lt;mfasheh at suse.com&gt;; 
Sent: 2016-05-10 (?) 13:53:41
Subject: [Ocfs2-devel] ocfs2: fix recursive locking deadlock
 

Hi,

These two patches is to fix recursive locking deadlock issues. As we
talked with Mark before, recursive locking is not allowed in ocfs2,
so these two patches fixes the deadlock issue with reverting back
patches to avoid recursive locking. Please review.

Thanks,
Junxiao.

_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://oss.oracle.com/pipermail/ocfs2-devel/attachments/20160515/2f869ef2/attachment.html 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-05-14 16:56 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-10  4:53 [Ocfs2-devel] ocfs2: fix recursive locking deadlock Junxiao Bi
2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang Junxiao Bi
2016-05-10  4:53 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: fix posix_acl_create deadlock Junxiao Bi
2016-05-10  5:58 ` [Ocfs2-devel] ocfs2: fix recursive locking deadlock Andrew Morton
2016-05-10  6:10   ` Junxiao Bi
2016-05-10  6:50     ` Andrew Morton
2016-05-14 16:56 ` Jeong Woo Seo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.