[Bugs] [Bug 1668286] READDIRP incorrectly updates posix-acl inode ctx

bugzilla at redhat.com bugzilla at redhat.com
Mon Jul 1 12:05:16 UTC 2019


homma at allworks.co.jp changed:

           What    |Removed                     |Added
          Component|read-ahead                  |posix-acl
           Severity|high                        |urgent

--- Comment #12 from homma at allworks.co.jp ---
The problem persists on release 5.6.
We cannot update fuse client to release 5 (or even 6) on our production
environment because of this problem.

I have examined the source code in more detail.
rda_fill_fd_cbk() passes entries with zeroed iatts to other xlators, but for
example, md-cache invalidates its cache entry when iatt with ia_ctime=0 is
In md-cache.c, function mdc_inode_iatt_set_validate():

        if (!iatt || !iatt->ia_ctime) {
            gf_msg_callingfn("md-cache", GF_LOG_TRACE, 0, 0,
                             "invalidating iatt(NULL)"
            mdc->ia_time = 0;
            mdc->valid = 0;

            gen = __mdc_get_generation(this, mdc);
            mdc->invalidation_time = (gen & 0xffffffff);
            goto unlock;

On the other hand, posix-acl updates its ctx without checking the content of
the passed iatts.
In posix-acl.c, function posix_acl_ctx_update():

        ctx = __posix_acl_ctx_get(inode, this, _gf_true);
        if (!ctx) {
            ret = -1;
            goto unlock;

        ctx->uid = buf->ia_uid;
        ctx->gid = buf->ia_gid;
        ctx->perm = st_mode_from_ia(buf->ia_prot, buf->ia_type);
        ctx->fop = fop;

I think posix-acl.c should be modified not to update its ctx, when iatt with
ia_ctime=0 is passed.

You are receiving this mail because:
You are on the CC list for the bug.
You are the assignee for the bug.

More information about the Bugs mailing list