Whamcloud - gitweb
LU-6142 lustre: Fix style issues for lustre_export.h
[fs/lustre-release.git] / lustre / include / upcall_cache.h
index 42e6b7f..fa2c590 100644 (file)
@@ -34,6 +34,9 @@
 
 #include <libcfs/libcfs.h>
 #include <uapi/linux/lnet/lnet-types.h>
+#include <uapi/linux/lustre/lustre_disk.h>
+#include <obd.h>
+#include <lustre_sec.h>
 
 /** \defgroup ucache ucache
  *
@@ -78,6 +81,26 @@ struct md_identity {
        struct md_perm            *mi_perms;
 };
 
+struct gss_rsi {
+       struct upcall_cache_entry *si_uc_entry;
+       lnet_nid_t                 si_nid4; /* FIXME Support larger NID */
+       char                       si_nm_name[LUSTRE_NODEMAP_NAME_LENGTH + 1];
+       __u32                      si_lustre_svc;
+       rawobj_t                   si_in_handle;
+       rawobj_t                   si_in_token;
+       rawobj_t                   si_out_handle;
+       rawobj_t                   si_out_token;
+       int                        si_major_status;
+       int                        si_minor_status;
+};
+
+struct gss_rsc {
+       struct upcall_cache_entry *sc_uc_entry;
+       struct obd_device         *sc_target;
+       rawobj_t                   sc_handle;
+       struct gss_svc_ctx         sc_ctx;
+};
+
 struct upcall_cache_entry {
        struct list_head        ue_hash;
        uint64_t                ue_key;
@@ -88,6 +111,8 @@ struct upcall_cache_entry {
        time64_t                ue_expire;
        union {
                struct md_identity      identity;
+               struct gss_rsi          rsi;
+               struct gss_rsc          rsc;
        } u;
 };
 
@@ -115,11 +140,12 @@ struct upcall_cache_ops {
 struct upcall_cache {
        struct list_head        *uc_hashtable;
        int                     uc_hashsize;
-       spinlock_t              uc_lock;
+       rwlock_t                uc_lock;
        struct rw_semaphore     uc_upcall_rwsem;
 
        char                    uc_name[40];            /* for upcall */
        char                    uc_upcall[UC_CACHE_UPCALL_MAXPATH];
+       bool                    uc_acquire_replay;
        time64_t                uc_acquire_expire;      /* seconds */
        time64_t                uc_entry_expire;        /* seconds */
        struct upcall_cache_ops *uc_ops;
@@ -127,6 +153,10 @@ struct upcall_cache {
 
 struct upcall_cache_entry *upcall_cache_get_entry(struct upcall_cache *cache,
                                                  __u64 key, void *args);
+void upcall_cache_get_entry_raw(struct upcall_cache_entry *entry);
+void upcall_cache_update_entry(struct upcall_cache *cache,
+                              struct upcall_cache_entry *entry,
+                              time64_t expire, int state);
 void upcall_cache_put_entry(struct upcall_cache *cache,
                            struct upcall_cache_entry *entry);
 int upcall_cache_downcall(struct upcall_cache *cache, __u32 err, __u64 key,
@@ -145,7 +175,9 @@ static inline void upcall_cache_flush_all(struct upcall_cache *cache)
 
 void upcall_cache_flush_one(struct upcall_cache *cache, __u64 key, void *args);
 struct upcall_cache *upcall_cache_init(const char *name, const char *upcall,
-                                     int hashsz, struct upcall_cache_ops *ops);
+                                      int hashsz, time64_t entry_expire,
+                                      time64_t acquire_expire, bool replayable,
+                                      struct upcall_cache_ops *ops);
 void upcall_cache_cleanup(struct upcall_cache *cache);
 
 /** @} ucache */