Re: lookup caching

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello there,

Raghavendra G wrote:
    I can see three protocol calls:
- client_open() (to both servers) - client_stat() (to one server only: load balancing?)
           - client_flush()        (to both servers)


io-cache indeed sends open and flush to server. This is needed for correct working of io-cache. As you've told below, since you are overriding lookup call, stat is sent to server (stat and lookup are two different calls).

OK. So no easy workaround can get rid of that. Right?

since lookup is being unwound if the stat is cached for an inode, you've to also implement calls like unlink, rmdir (which deletes files/directories) and flush the cache corresponding to the inode. Otherwise lookup will be succeeding even for unlinked files, but the actual operations (like open/chmod/chown etc) will fail.

I have added this yesterday afternoon, as well as some LOCK/UNLOCK in order to prevent concurrency problems. :)

You should also handle calls which can change the stat of a file or directory (like write/chmod/chown). As a simple implementation you can just flush the cache.

I did override setattr and fsetattr (for flushing the cache). Is it wrong? Do I have to override write/chmod/chown either?

           if (cache->next) {
                   do {
                           cache = cache->next;
                           if (cache->ino == ino) {


instead of just returning, you can choose to update the cached stat with the one passed as argument to this procedure.
                                   return 0;       /* already in */
                           }
                   } while(cache->next);
           }

Thanks for suggestion.

Best regards,
--
Olivier




[Index of Archives]     [Gluster Users]     [Ceph Users]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux