[Ocfs2-devel] [PATCH] ocfs2: drop acl cache for directories too

Wengang Wang wen.gang.wang at oracle.com
Mon Sep 20 08:36:04 PDT 2021



> On Sep 17, 2021, at 7:43 PM, Joseph Qi <joseph.qi at linux.alibaba.com> wrote:
> 
> It has already been added in -mm tree.

thanks!
wengang

> 
> Thanks,
> Joseph
> 
> On 9/18/21 12:46 AM, Wengang Wang wrote:
>> Hi Andrew,
>> 
>> Can you pls merge this patch if it’s not already on the way?
>> 
>> thanks,
>> wengang
>> 
>> On Sep 6, 2021, at 4:42 AM, Joseph Qi <joseph.qi at linux.alibaba.com<mailto:joseph.qi at linux.alibaba.com>> wrote:
>> 
>> 
>> 
>> On 9/3/21 9:26 AM, Wengang Wang wrote:
>> ocfs2_data_convert_worker() is currently dropping any cached acl info
>> for FILE before down-converting meta lock. It should also drop for DIRECTORY.
>> Otherwise the second acl lookup returns the cached one (from VFS layer) which
>> could be already stale.
>> 
>> The problem we are seeing is that the acl changes on one node doesn't get
>> refreshed on other nodes in the following case:
>> 
>> Node 1                    Node 2
>> --------------            ----------------
>> getfacl dir1
>> 
>>  getfacl dir1    <-- this is OK
>> 
>> setfacl -m u:user1:rwX dir1
>> getfacl dir1   <-- see the change for user1
>> 
>>  getfacl dir1    <-- can't see change for user1
>> 
>> Signed-off-by: Wengang Wang <wen.gang.wang at oracle.com<mailto:wen.gang.wang at oracle.com>>
>> 
>> Looks sane to me.
>> Reviewed-by: Joseph Qi <joseph.qi at linux.alibaba.com<mailto:joseph.qi at linux.alibaba.com>>
>> 
>> ---
>> fs/ocfs2/dlmglue.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
>> index 50a863fc1779..207ec61569ea 100644
>> --- a/fs/ocfs2/dlmglue.c
>> +++ b/fs/ocfs2/dlmglue.c
>> @@ -3933,7 +3933,7 @@ static int ocfs2_data_convert_worker(struct ocfs2_lock_res *lockres,
>> oi = OCFS2_I(inode);
>> oi->ip_dir_lock_gen++;
>> mlog(0, "generation: %u\n", oi->ip_dir_lock_gen);
>> - goto out;
>> + goto out_forget;
>> }
>> 
>> if (!S_ISREG(inode->i_mode))
>> @@ -3964,6 +3964,7 @@ static int ocfs2_data_convert_worker(struct ocfs2_lock_res *lockres,
>> filemap_fdatawait(mapping);
>> }
>> 
>> +out_forget:
>> forget_all_cached_acls(inode);
>> 
>> out:
>> 



More information about the Ocfs2-devel mailing list