* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
@ 2010-07-21 14:48 Jiaju Zhang
2010-07-21 15:17 ` Wengang Wang
0 siblings, 1 reply; 11+ messages in thread
From: Jiaju Zhang @ 2010-07-21 14:48 UTC (permalink / raw)
To: ocfs2-devel
Hi,
This is an improved patch for the bug
https://bugzilla.novell.com/show_bug.cgi?id=614332
(also http://oss.oracle.com/bugzilla/show_bug.cgi?id=1278)
It is a nested PR lock calling issue, the referenced stack trace is
as:
smbd D ffff8800013d0600 0 9522 5608 0x00000000
ffff88002ca7fb18 0000000000000282 ffff88002f964500 ffff88002ca7fa98
ffff8800013d0600 ffff88002ca7fae0 ffff88002f964340 ffff88002f964340
ffff88002ca7ffd8 ffff88002ca7ffd8 ffff88002f964340 ffff88002f964340
Call Trace:
[<ffffffff80350425>] schedule_timeout+0x175/0x210
[<ffffffff8034f580>] wait_for_common+0xf0/0x210
[<ffffffffa03e12b9>] __ocfs2_cluster_lock+0x3b9/0xa90 [ocfs2]
[<ffffffffa03e7665>] ocfs2_inode_lock_full_nested+0x255/0xdb0 [ocfs2]
[<ffffffffa0446019>] ocfs2_get_acl+0x69/0x120 [ocfs2]
[<ffffffffa0446368>] ocfs2_check_acl+0x28/0x80 [ocfs2]
[<ffffffff800e3507>] acl_permission_check+0x57/0xb0
[<ffffffff800e357d>] generic_permission+0x1d/0xc0
[<ffffffffa03eecea>] ocfs2_permission+0x10a/0x1d0 [ocfs2]
[<ffffffff800e3f65>] inode_permission+0x45/0x100
[<ffffffff800d86b3>] sys_chdir+0x53/0x90
[<ffffffff80007458>] system_call_fastpath+0x16/0x1b
[<00007f34a4ef6927>] 0x7f34a4ef6927
Many thanks for your review and comments;)
Thanks,
Jiaju
Signed-off-by: <jjzhang@suse.de>
Cc: Joel Becker <Joel.Becker@oracle.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Sunil Mushran <sunil.mushran@oracle.com>
Cc: Tao Ma <tao.ma@oracle.com>
Cc: Tiger Yang <tiger.yang@oracle.com>
Cc: Wengang Wang <wen.gang.wang@oracle.com>
---
fs/ocfs2/acl.c | 21 +++++++++++++++++----
1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
index da70229..ecf73f4 100644
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -290,17 +290,30 @@ static int ocfs2_set_acl(handle_t *handle,
int ocfs2_check_acl(struct inode *inode, int mask)
{
- struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
+ struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
+ struct posix_acl *acl;
+ struct buffer_head *di_bh = NULL;
+ int ret = -EAGAIN;
+
+ if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
+ return ret;
+
+ ret = ocfs2_read_inode_block(inode, &di_bh);
+ if (ret < 0) {
+ mlog_errno(ret);
+ return ret;
+ }
+
+ acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, di_bh);
if (IS_ERR(acl))
return PTR_ERR(acl);
if (acl) {
- int ret = posix_acl_permission(inode, acl, mask);
+ ret = posix_acl_permission(inode, acl, mask);
posix_acl_release(acl);
- return ret;
}
- return -EAGAIN;
+ return ret;
}
int ocfs2_acl_chmod(struct inode *inode)
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-21 14:48 [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue Jiaju Zhang
@ 2010-07-21 15:17 ` Wengang Wang
2010-07-21 16:05 ` Jiaju Zhang
0 siblings, 1 reply; 11+ messages in thread
From: Wengang Wang @ 2010-07-21 15:17 UTC (permalink / raw)
To: ocfs2-devel
On 10-07-21 22:48, Jiaju Zhang wrote:
> Hi,
>
> This is an improved patch for the bug
> https://bugzilla.novell.com/show_bug.cgi?id=614332
> (also http://oss.oracle.com/bugzilla/show_bug.cgi?id=1278)
>
> It is a nested PR lock calling issue, the referenced stack trace is
> as:
> smbd D ffff8800013d0600 0 9522 5608 0x00000000
> ffff88002ca7fb18 0000000000000282 ffff88002f964500 ffff88002ca7fa98
> ffff8800013d0600 ffff88002ca7fae0 ffff88002f964340 ffff88002f964340
> ffff88002ca7ffd8 ffff88002ca7ffd8 ffff88002f964340 ffff88002f964340
> Call Trace:
> [<ffffffff80350425>] schedule_timeout+0x175/0x210
> [<ffffffff8034f580>] wait_for_common+0xf0/0x210
> [<ffffffffa03e12b9>] __ocfs2_cluster_lock+0x3b9/0xa90 [ocfs2]
> [<ffffffffa03e7665>] ocfs2_inode_lock_full_nested+0x255/0xdb0 [ocfs2]
> [<ffffffffa0446019>] ocfs2_get_acl+0x69/0x120 [ocfs2]
> [<ffffffffa0446368>] ocfs2_check_acl+0x28/0x80 [ocfs2]
> [<ffffffff800e3507>] acl_permission_check+0x57/0xb0
> [<ffffffff800e357d>] generic_permission+0x1d/0xc0
> [<ffffffffa03eecea>] ocfs2_permission+0x10a/0x1d0 [ocfs2]
> [<ffffffff800e3f65>] inode_permission+0x45/0x100
> [<ffffffff800d86b3>] sys_chdir+0x53/0x90
> [<ffffffff80007458>] system_call_fastpath+0x16/0x1b
> [<00007f34a4ef6927>] 0x7f34a4ef6927
>
> Many thanks for your review and comments;)
>
> Thanks,
> Jiaju
>
> Signed-off-by: <jjzhang@suse.de>
> Cc: Joel Becker <Joel.Becker@oracle.com>
> Cc: Mark Fasheh <mfasheh@suse.com>
> Cc: Sunil Mushran <sunil.mushran@oracle.com>
> Cc: Tao Ma <tao.ma@oracle.com>
> Cc: Tiger Yang <tiger.yang@oracle.com>
> Cc: Wengang Wang <wen.gang.wang@oracle.com>
> ---
> fs/ocfs2/acl.c | 21 +++++++++++++++++----
> 1 files changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
> index da70229..ecf73f4 100644
> --- a/fs/ocfs2/acl.c
> +++ b/fs/ocfs2/acl.c
> @@ -290,17 +290,30 @@ static int ocfs2_set_acl(handle_t *handle,
>
> int ocfs2_check_acl(struct inode *inode, int mask)
> {
> - struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
> + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
> + struct posix_acl *acl;
> + struct buffer_head *di_bh = NULL;
> + int ret = -EAGAIN;
> +
> + if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
> + return ret;
> +
> + ret = ocfs2_read_inode_block(inode, &di_bh);
> + if (ret < 0) {
> + mlog_errno(ret);
> + return ret;
> + }
> +
> + acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, di_bh);
From here on, you need to release di_bh.
regards,
wengang.
>
> if (IS_ERR(acl))
> return PTR_ERR(acl);
> if (acl) {
> - int ret = posix_acl_permission(inode, acl, mask);
> + ret = posix_acl_permission(inode, acl, mask);
> posix_acl_release(acl);
> - return ret;
> }
>
> - return -EAGAIN;
> + return ret;
> }
>
> int ocfs2_acl_chmod(struct inode *inode)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-21 15:17 ` Wengang Wang
@ 2010-07-21 16:05 ` Jiaju Zhang
2010-07-21 18:26 ` Sunil Mushran
0 siblings, 1 reply; 11+ messages in thread
From: Jiaju Zhang @ 2010-07-21 16:05 UTC (permalink / raw)
To: ocfs2-devel
On Wed, Jul 21, 2010 at 11:17:01PM +0800, Wengang Wang wrote:
> On 10-07-21 22:48, Jiaju Zhang wrote:
> > Hi,
> >
> > This is an improved patch for the bug
> > https://bugzilla.novell.com/show_bug.cgi?id=614332
> > (also http://oss.oracle.com/bugzilla/show_bug.cgi?id=1278)
> >
> > It is a nested PR lock calling issue, the referenced stack trace is
> > as:
> > smbd D ffff8800013d0600 0 9522 5608 0x00000000
> > ffff88002ca7fb18 0000000000000282 ffff88002f964500 ffff88002ca7fa98
> > ffff8800013d0600 ffff88002ca7fae0 ffff88002f964340 ffff88002f964340
> > ffff88002ca7ffd8 ffff88002ca7ffd8 ffff88002f964340 ffff88002f964340
> > Call Trace:
> > [<ffffffff80350425>] schedule_timeout+0x175/0x210
> > [<ffffffff8034f580>] wait_for_common+0xf0/0x210
> > [<ffffffffa03e12b9>] __ocfs2_cluster_lock+0x3b9/0xa90 [ocfs2]
> > [<ffffffffa03e7665>] ocfs2_inode_lock_full_nested+0x255/0xdb0 [ocfs2]
> > [<ffffffffa0446019>] ocfs2_get_acl+0x69/0x120 [ocfs2]
> > [<ffffffffa0446368>] ocfs2_check_acl+0x28/0x80 [ocfs2]
> > [<ffffffff800e3507>] acl_permission_check+0x57/0xb0
> > [<ffffffff800e357d>] generic_permission+0x1d/0xc0
> > [<ffffffffa03eecea>] ocfs2_permission+0x10a/0x1d0 [ocfs2]
> > [<ffffffff800e3f65>] inode_permission+0x45/0x100
> > [<ffffffff800d86b3>] sys_chdir+0x53/0x90
> > [<ffffffff80007458>] system_call_fastpath+0x16/0x1b
> > [<00007f34a4ef6927>] 0x7f34a4ef6927
> >
> > Many thanks for your review and comments;)
> >
> > Thanks,
> > Jiaju
> >
> > Signed-off-by: <jjzhang@suse.de>
> > Cc: Joel Becker <Joel.Becker@oracle.com>
> > Cc: Mark Fasheh <mfasheh@suse.com>
> > Cc: Sunil Mushran <sunil.mushran@oracle.com>
> > Cc: Tao Ma <tao.ma@oracle.com>
> > Cc: Tiger Yang <tiger.yang@oracle.com>
> > Cc: Wengang Wang <wen.gang.wang@oracle.com>
> > ---
> > fs/ocfs2/acl.c | 21 +++++++++++++++++----
> > 1 files changed, 17 insertions(+), 4 deletions(-)
> >
> > diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
> > index da70229..ecf73f4 100644
> > --- a/fs/ocfs2/acl.c
> > +++ b/fs/ocfs2/acl.c
> > @@ -290,17 +290,30 @@ static int ocfs2_set_acl(handle_t *handle,
> >
> > int ocfs2_check_acl(struct inode *inode, int mask)
> > {
> > - struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
> > + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
> > + struct posix_acl *acl;
> > + struct buffer_head *di_bh = NULL;
> > + int ret = -EAGAIN;
> > +
> > + if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
> > + return ret;
> > +
> > + ret = ocfs2_read_inode_block(inode, &di_bh);
> > + if (ret < 0) {
> > + mlog_errno(ret);
> > + return ret;
> > + }
> > +
> > + acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, di_bh);
>
> >From here on, you need to release di_bh.
Oh yes, sorry, I should check the code more closely before sending it
out;)
Here is the new patch:
Signed-off-by: Jiaju Zhang <jjzhang@suse.de>
---
fs/ocfs2/acl.c | 23 +++++++++++++++++++----
1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
index da70229..a1d25ca 100644
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -290,17 +290,32 @@ static int ocfs2_set_acl(handle_t *handle,
int ocfs2_check_acl(struct inode *inode, int mask)
{
- struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
+ struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
+ struct posix_acl *acl;
+ struct buffer_head *di_bh = NULL;
+ int ret = -EAGAIN;
+
+ if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
+ return ret;
+
+ ret = ocfs2_read_inode_block(inode, &di_bh);
+ if (ret < 0) {
+ mlog_errno(ret);
+ return ret;
+ }
+
+ acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, di_bh);
+
+ brelse(di_bh);
if (IS_ERR(acl))
return PTR_ERR(acl);
if (acl) {
- int ret = posix_acl_permission(inode, acl, mask);
+ ret = posix_acl_permission(inode, acl, mask);
posix_acl_release(acl);
- return ret;
}
- return -EAGAIN;
+ return ret;
}
int ocfs2_acl_chmod(struct inode *inode)
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-21 16:05 ` Jiaju Zhang
@ 2010-07-21 18:26 ` Sunil Mushran
2010-07-22 5:26 ` Jiaju Zhang
2010-07-23 22:42 ` Tiger Yang
0 siblings, 2 replies; 11+ messages in thread
From: Sunil Mushran @ 2010-07-21 18:26 UTC (permalink / raw)
To: ocfs2-devel
Why not add _ocfs2_get_acl() that does the same without
taking the cluster locks?
On 07/21/2010 09:05 AM, Jiaju Zhang wrote:
> On Wed, Jul 21, 2010 at 11:17:01PM +0800, Wengang Wang wrote:
>
>> On 10-07-21 22:48, Jiaju Zhang wrote:
>>
>>> Hi,
>>>
>>> This is an improved patch for the bug
>>> https://bugzilla.novell.com/show_bug.cgi?id=614332
>>> (also http://oss.oracle.com/bugzilla/show_bug.cgi?id=1278)
>>>
>>> It is a nested PR lock calling issue, the referenced stack trace is
>>> as:
>>> smbd D ffff8800013d0600 0 9522 5608 0x00000000
>>> ffff88002ca7fb18 0000000000000282 ffff88002f964500 ffff88002ca7fa98
>>> ffff8800013d0600 ffff88002ca7fae0 ffff88002f964340 ffff88002f964340
>>> ffff88002ca7ffd8 ffff88002ca7ffd8 ffff88002f964340 ffff88002f964340
>>> Call Trace:
>>> [<ffffffff80350425>] schedule_timeout+0x175/0x210
>>> [<ffffffff8034f580>] wait_for_common+0xf0/0x210
>>> [<ffffffffa03e12b9>] __ocfs2_cluster_lock+0x3b9/0xa90 [ocfs2]
>>> [<ffffffffa03e7665>] ocfs2_inode_lock_full_nested+0x255/0xdb0 [ocfs2]
>>> [<ffffffffa0446019>] ocfs2_get_acl+0x69/0x120 [ocfs2]
>>> [<ffffffffa0446368>] ocfs2_check_acl+0x28/0x80 [ocfs2]
>>> [<ffffffff800e3507>] acl_permission_check+0x57/0xb0
>>> [<ffffffff800e357d>] generic_permission+0x1d/0xc0
>>> [<ffffffffa03eecea>] ocfs2_permission+0x10a/0x1d0 [ocfs2]
>>> [<ffffffff800e3f65>] inode_permission+0x45/0x100
>>> [<ffffffff800d86b3>] sys_chdir+0x53/0x90
>>> [<ffffffff80007458>] system_call_fastpath+0x16/0x1b
>>> [<00007f34a4ef6927>] 0x7f34a4ef6927
>>>
>>> Many thanks for your review and comments;)
>>>
>>> Thanks,
>>> Jiaju
>>>
>>> Signed-off-by:<jjzhang@suse.de>
>>> Cc: Joel Becker<Joel.Becker@oracle.com>
>>> Cc: Mark Fasheh<mfasheh@suse.com>
>>> Cc: Sunil Mushran<sunil.mushran@oracle.com>
>>> Cc: Tao Ma<tao.ma@oracle.com>
>>> Cc: Tiger Yang<tiger.yang@oracle.com>
>>> Cc: Wengang Wang<wen.gang.wang@oracle.com>
>>> ---
>>> fs/ocfs2/acl.c | 21 +++++++++++++++++----
>>> 1 files changed, 17 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
>>> index da70229..ecf73f4 100644
>>> --- a/fs/ocfs2/acl.c
>>> +++ b/fs/ocfs2/acl.c
>>> @@ -290,17 +290,30 @@ static int ocfs2_set_acl(handle_t *handle,
>>>
>>> int ocfs2_check_acl(struct inode *inode, int mask)
>>> {
>>> - struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
>>> + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
>>> + struct posix_acl *acl;
>>> + struct buffer_head *di_bh = NULL;
>>> + int ret = -EAGAIN;
>>> +
>>> + if (!(osb->s_mount_opt& OCFS2_MOUNT_POSIX_ACL))
>>> + return ret;
>>> +
>>> + ret = ocfs2_read_inode_block(inode,&di_bh);
>>> + if (ret< 0) {
>>> + mlog_errno(ret);
>>> + return ret;
>>> + }
>>> +
>>> + acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, di_bh);
>>>
>> > From here on, you need to release di_bh.
>>
> Oh yes, sorry, I should check the code more closely before sending it
> out;)
>
> Here is the new patch:
>
> Signed-off-by: Jiaju Zhang<jjzhang@suse.de>
> ---
> fs/ocfs2/acl.c | 23 +++++++++++++++++++----
> 1 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
> index da70229..a1d25ca 100644
> --- a/fs/ocfs2/acl.c
> +++ b/fs/ocfs2/acl.c
> @@ -290,17 +290,32 @@ static int ocfs2_set_acl(handle_t *handle,
>
> int ocfs2_check_acl(struct inode *inode, int mask)
> {
> - struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
> + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
> + struct posix_acl *acl;
> + struct buffer_head *di_bh = NULL;
> + int ret = -EAGAIN;
> +
> + if (!(osb->s_mount_opt& OCFS2_MOUNT_POSIX_ACL))
> + return ret;
> +
> + ret = ocfs2_read_inode_block(inode,&di_bh);
> + if (ret< 0) {
> + mlog_errno(ret);
> + return ret;
> + }
> +
> + acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, di_bh);
> +
> + brelse(di_bh);
>
> if (IS_ERR(acl))
> return PTR_ERR(acl);
> if (acl) {
> - int ret = posix_acl_permission(inode, acl, mask);
> + ret = posix_acl_permission(inode, acl, mask);
> posix_acl_release(acl);
> - return ret;
> }
>
> - return -EAGAIN;
> + return ret;
> }
>
> int ocfs2_acl_chmod(struct inode *inode)
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-21 18:26 ` Sunil Mushran
@ 2010-07-22 5:26 ` Jiaju Zhang
2010-07-22 10:11 ` Wengang Wang
2010-07-23 22:42 ` Tiger Yang
1 sibling, 1 reply; 11+ messages in thread
From: Jiaju Zhang @ 2010-07-22 5:26 UTC (permalink / raw)
To: ocfs2-devel
On Wed, Jul 21, 2010 at 11:26:42AM -0700, Sunil Mushran wrote:
> Why not add _ocfs2_get_acl() that does the same without
> taking the cluster locks?
Good suggestion! It will make the code much clearer. I attached the
improved patch as below. One thing I'm not sure is do we need to
exchange the function name '_ocfs2_get_acl' and 'ocfs2_get_acl_nolock'
as well? I'm not sure which is better, so just add a function
_ocfs2_get_acl() in this patch now.
Many thanks for your review and comments;)
Thanks,
Jiaju
Signed-off-by: Jiaju Zhang <jjzhang@suse.de>
---
fs/ocfs2/acl.c | 25 ++++++++++++++++++++++++-
1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
index da70229..b85e092 100644
--- a/fs/ocfs2/acl.c
+++ b/fs/ocfs2/acl.c
@@ -138,6 +138,29 @@ static struct posix_acl *ocfs2_get_acl_nolock(struct inode *inode,
return acl;
}
+static struct posix_acl *_ocfs2_get_acl(struct inode *inode, int type)
+{
+ struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
+ struct buffer_head *di_bh = NULL;
+ struct posix_acl *acl;
+ int ret;
+
+ if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
+ return NULL;
+
+ ret = ocfs2_read_inode_block(inode, &di_bh);
+ if (ret < 0) {
+ mlog_errno(ret);
+ acl = ERR_PTR(ret);
+ return acl;
+ }
+
+ acl = ocfs2_get_acl_nolock(inode, type, di_bh);
+
+ brelse(di_bh);
+
+ return acl;
+}
/*
* Get posix acl.
@@ -290,7 +313,7 @@ static int ocfs2_set_acl(handle_t *handle,
int ocfs2_check_acl(struct inode *inode, int mask)
{
- struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
+ struct posix_acl *acl = _ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
if (IS_ERR(acl))
return PTR_ERR(acl);
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-22 5:26 ` Jiaju Zhang
@ 2010-07-22 10:11 ` Wengang Wang
2010-07-22 13:16 ` Jiaju Zhang
0 siblings, 1 reply; 11+ messages in thread
From: Wengang Wang @ 2010-07-22 10:11 UTC (permalink / raw)
To: ocfs2-devel
ocfs2_get_acl_nolock() has the same functionality just with different
arguments. And we can't replace it with the new _ocfs2_get_acl() for the
call in ocfs2_init_acl().
So I am wondering if we really need the new _ocfs2_get_acl().
regards,
wengang.
On 10-07-22 13:26, Jiaju Zhang wrote:
> On Wed, Jul 21, 2010 at 11:26:42AM -0700, Sunil Mushran wrote:
> > Why not add _ocfs2_get_acl() that does the same without
> > taking the cluster locks?
>
> Good suggestion! It will make the code much clearer. I attached the
> improved patch as below. One thing I'm not sure is do we need to
> exchange the function name '_ocfs2_get_acl' and 'ocfs2_get_acl_nolock'
> as well? I'm not sure which is better, so just add a function
> _ocfs2_get_acl() in this patch now.
>
> Many thanks for your review and comments;)
>
> Thanks,
> Jiaju
>
> Signed-off-by: Jiaju Zhang <jjzhang@suse.de>
> ---
> fs/ocfs2/acl.c | 25 ++++++++++++++++++++++++-
> 1 files changed, 24 insertions(+), 1 deletions(-)
>
> diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
> index da70229..b85e092 100644
> --- a/fs/ocfs2/acl.c
> +++ b/fs/ocfs2/acl.c
> @@ -138,6 +138,29 @@ static struct posix_acl *ocfs2_get_acl_nolock(struct inode *inode,
> return acl;
> }
>
> +static struct posix_acl *_ocfs2_get_acl(struct inode *inode, int type)
> +{
> + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
> + struct buffer_head *di_bh = NULL;
> + struct posix_acl *acl;
> + int ret;
> +
> + if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
> + return NULL;
> +
> + ret = ocfs2_read_inode_block(inode, &di_bh);
> + if (ret < 0) {
> + mlog_errno(ret);
> + acl = ERR_PTR(ret);
> + return acl;
> + }
> +
> + acl = ocfs2_get_acl_nolock(inode, type, di_bh);
> +
> + brelse(di_bh);
> +
> + return acl;
> +}
>
> /*
> * Get posix acl.
> @@ -290,7 +313,7 @@ static int ocfs2_set_acl(handle_t *handle,
>
> int ocfs2_check_acl(struct inode *inode, int mask)
> {
> - struct posix_acl *acl = ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
> + struct posix_acl *acl = _ocfs2_get_acl(inode, ACL_TYPE_ACCESS);
>
> if (IS_ERR(acl))
> return PTR_ERR(acl);
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-22 10:11 ` Wengang Wang
@ 2010-07-22 13:16 ` Jiaju Zhang
2010-07-22 13:27 ` Wengang Wang
0 siblings, 1 reply; 11+ messages in thread
From: Jiaju Zhang @ 2010-07-22 13:16 UTC (permalink / raw)
To: ocfs2-devel
On Thu, Jul 22, 2010 at 6:11 PM, Wengang Wang <wen.gang.wang@oracle.com> wrote:
> ocfs2_get_acl_nolock() has the same functionality just with different
> arguments. And we can't replace it with the new _ocfs2_get_acl() for the
> call in ocfs2_init_acl().
I don't mean replace ocfs2_get_acl_nolock() with _ocfs2_get_acl().
What I'm just thinking is if we have the necessity of rename current
ocfs2_get_acl_nolock() with _ocfs2_get_acl(), and also rename current
_ocfs2_get_acl() in my patch with ocfs2_get_acl_nolock(). Anyway, it
is just a very minor change, I'm not sure if we should do it or not.
> So I am wondering if we really need the new _ocfs2_get_acl().
IMO, we may need _ocfs2_get_acl(). It will make the code looks clearer;)
Thanks,
Jiaju
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-22 13:16 ` Jiaju Zhang
@ 2010-07-22 13:27 ` Wengang Wang
0 siblings, 0 replies; 11+ messages in thread
From: Wengang Wang @ 2010-07-22 13:27 UTC (permalink / raw)
To: ocfs2-devel
My reply is mainly to Sunil. Sorry for the confusing!
Your patch is good if we need the _ocfs2_get_acl and don't touch
ocfs2_get_acl_nolock :)
regards,
wengang.
On 10-07-22 21:16, Jiaju Zhang wrote:
> On Thu, Jul 22, 2010 at 6:11 PM, Wengang Wang <wen.gang.wang@oracle.com> wrote:
> > ocfs2_get_acl_nolock() has the same functionality just with different
> > arguments. And we can't replace it with the new _ocfs2_get_acl() for the
> > call in ocfs2_init_acl().
>
> I don't mean replace ocfs2_get_acl_nolock() with _ocfs2_get_acl().
> What I'm just thinking is if we have the necessity of rename current
> ocfs2_get_acl_nolock() with _ocfs2_get_acl(), and also rename current
> _ocfs2_get_acl() in my patch with ocfs2_get_acl_nolock(). Anyway, it
> is just a very minor change, I'm not sure if we should do it or not.
>
> > So I am wondering if we really need the new _ocfs2_get_acl().
>
> IMO, we may need _ocfs2_get_acl(). It will make the code looks clearer;)
>
> Thanks,
> Jiaju
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-21 18:26 ` Sunil Mushran
2010-07-22 5:26 ` Jiaju Zhang
@ 2010-07-23 22:42 ` Tiger Yang
2010-07-23 23:08 ` Sunil Mushran
1 sibling, 1 reply; 11+ messages in thread
From: Tiger Yang @ 2010-07-23 22:42 UTC (permalink / raw)
To: ocfs2-devel
Hi, Sunil,
I think put them in ocfs2_check_acl() is better.
First, check mount option in ocfs2_check_acl() is more clear than in
_ocfs2_get_acl().
Second, we already have ocfs2_get_acl and ocfs2_get_acl_nolock, so it
seems _ocfs2_get_acl is redundant and could cause confusing for reading
the code.
Regards,
tiger
On 07/21/2010 02:26 PM, Sunil Mushran wrote:
> Why not add _ocfs2_get_acl() that does the same without
> taking the cluster locks?
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-23 22:42 ` Tiger Yang
@ 2010-07-23 23:08 ` Sunil Mushran
2010-07-26 3:26 ` Jiaju Zhang
0 siblings, 1 reply; 11+ messages in thread
From: Sunil Mushran @ 2010-07-23 23:08 UTC (permalink / raw)
To: ocfs2-devel
ok. Then review Jiaju's earlier patch.
On 07/23/2010 03:42 PM, Tiger Yang wrote:
> Hi, Sunil,
>
> I think put them in ocfs2_check_acl() is better.
> First, check mount option in ocfs2_check_acl() is more clear than in
> _ocfs2_get_acl().
> Second, we already have ocfs2_get_acl and ocfs2_get_acl_nolock, so it
> seems _ocfs2_get_acl is redundant and could cause confusing for
> reading the code.
>
> Regards,
> tiger
>
> On 07/21/2010 02:26 PM, Sunil Mushran wrote:
>> Why not add _ocfs2_get_acl() that does the same without
>> taking the cluster locks?
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue
2010-07-23 23:08 ` Sunil Mushran
@ 2010-07-26 3:26 ` Jiaju Zhang
0 siblings, 0 replies; 11+ messages in thread
From: Jiaju Zhang @ 2010-07-26 3:26 UTC (permalink / raw)
To: ocfs2-devel
On Sat, Jul 24, 2010 at 7:08 AM, Sunil Mushran <sunil.mushran@oracle.com> wrote:
> ok. Then review Jiaju's earlier patch.
Thanks a lot for all the review and comments. I'll start a new drop of
that patch for easily reviewing:-)
Thanks,
Jiaju
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-07-26 3:26 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-21 14:48 [Ocfs2-devel] [PATCH V2] Fix the nested PR lock calling issue Jiaju Zhang
2010-07-21 15:17 ` Wengang Wang
2010-07-21 16:05 ` Jiaju Zhang
2010-07-21 18:26 ` Sunil Mushran
2010-07-22 5:26 ` Jiaju Zhang
2010-07-22 10:11 ` Wengang Wang
2010-07-22 13:16 ` Jiaju Zhang
2010-07-22 13:27 ` Wengang Wang
2010-07-23 22:42 ` Tiger Yang
2010-07-23 23:08 ` Sunil Mushran
2010-07-26 3:26 ` Jiaju Zhang
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.