struct list_head ll_pglist;
struct ll_ra_info ll_ra_info;
-
+
+ unsigned int ll_remote; /* remote client? */
+
/* times spent waiting for locks in each call site. These are
* all protected by the ll_lock */
struct obd_service_time ll_read_stime;
struct semaphore ll_gns_sem;
spinlock_t ll_gns_lock;
wait_queue_head_t ll_gns_waitq;
+ atomic_t ll_gns_enabled;
int ll_gns_state;
struct timer_list ll_gns_timer;
struct list_head ll_gns_sbi_head;
+ struct completion ll_gns_mount_finished;
+ struct dentry *ll_gns_pending_dentry;
unsigned long ll_gns_tick;
unsigned long ll_gns_timeout;
- struct completion ll_gns_mount_finished;
/* path to upcall */
char ll_gns_upcall[PATH_MAX];
extern kmem_cache_t *ll_file_data_slab;
extern kmem_cache_t *ll_intent_slab;
struct lustre_handle;
+
struct ll_file_data {
struct ll_readahead_state fd_ras;
__u32 fd_flags;
data->mod_time = LTIME_S(CURRENT_TIME);
}
+#if 0
+/*
+ * this was needed for catching correct calling place of ll_intent_alloc() with
+ * missed ll_intent_free() causing memory leak. --umka
+ */
+#define ll_intent_alloc(it) \
+ ({ \
+ int err; \
+ OBD_SLAB_ALLOC((it)->d.fs_data, ll_intent_slab, SLAB_KERNEL, \
+ sizeof(struct lustre_intent_data)); \
+ if (!(it)->d.fs_data) { \
+ err = -ENOMEM; \
+ } else { \
+ err = 0; \
+ } \
+ (it)->it_op_release = ll_intent_release; \
+ err; \
+ })
+
+#define ll_intent_free(it) \
+ do { \
+ if ((it)->d.fs_data) { \
+ OBD_SLAB_FREE((it)->d.fs_data, ll_intent_slab, \
+ sizeof(struct lustre_intent_data)); \
+ (it)->d.fs_data = NULL; \
+ } \
+ } while (0)
+#endif
+
#endif /* LLITE_INTERNAL_H */