extern unsigned int obd_debug_peer_on_timeout;
extern unsigned int obd_dump_on_timeout;
extern unsigned int obd_dump_on_eviction;
+extern unsigned int obd_lbug_on_eviction;
/* obd_timeout should only be used for recovery, not for
networking / disk / timings affected by load (use Adaptive Timeouts) */
extern unsigned int obd_timeout; /* seconds */
extern int at_extra;
extern unsigned long obd_max_dirty_pages;
extern atomic_long_t obd_dirty_pages;
-extern atomic_long_t obd_dirty_transit_pages;
extern char obd_jobid_var[];
/* Some hash init argument constants */
-#define HASH_POOLS_BKT_BITS 3
-#define HASH_POOLS_CUR_BITS 3
-#define HASH_POOLS_MAX_BITS 7
-#define HASH_UUID_BKT_BITS 5
-#define HASH_UUID_CUR_BITS 7
-#define HASH_UUID_MAX_BITS 12
-#define HASH_NID_BKT_BITS 5
-#define HASH_NID_CUR_BITS 7
-#define HASH_NID_MAX_BITS 12
#define HASH_NID_STATS_BKT_BITS 5
#define HASH_NID_STATS_CUR_BITS 7
#define HASH_NID_STATS_MAX_BITS 12
#define HASH_LQE_BKT_BITS 5
#define HASH_LQE_CUR_BITS 7
#define HASH_LQE_MAX_BITS 12
-#define HASH_CONN_BKT_BITS 5
-#define HASH_CONN_CUR_BITS 5
-#define HASH_CONN_MAX_BITS 15
#define HASH_EXP_LOCK_BKT_BITS 5
#define HASH_EXP_LOCK_CUR_BITS 7
#define HASH_EXP_LOCK_MAX_BITS 16
-#define HASH_CL_ENV_BKT_BITS 5
-#define HASH_CL_ENV_BITS 10
#define HASH_JOB_STATS_BKT_BITS 5
#define HASH_JOB_STATS_CUR_BITS 7
#define HASH_JOB_STATS_MAX_BITS 12
#define RECONNECT_DELAY_MAX (CONNECTION_SWITCH_MAX + CONNECTION_SWITCH_INC + \
INITIAL_CONNECT_TIMEOUT)
/* The min time a target should wait for clients to reconnect in recovery */
-#define OBD_RECOVERY_TIME_MIN (2*RECONNECT_DELAY_MAX)
-#define OBD_IR_FACTOR_MIN 1
-#define OBD_IR_FACTOR_MAX 10
-#define OBD_IR_FACTOR_DEFAULT (OBD_IR_FACTOR_MAX/2)
+#define OBD_RECOVERY_TIME_MIN (2*RECONNECT_DELAY_MAX)
+#define OBD_IR_FACTOR_MIN 1
+#define OBD_IR_FACTOR_MAX 10
+#define OBD_IR_FACTOR_DEFAULT (OBD_IR_FACTOR_MAX/2)
/* default timeout for the MGS to become IR_FULL */
-#define OBD_IR_MGS_TIMEOUT (4*obd_timeout)
-#define LONG_UNLINK 300 /* Unlink should happen before now */
+#define OBD_IR_MGS_TIMEOUT (4*obd_timeout)
+/* Unlink should happen within this many seconds. */
+#define PTLRPC_REQ_LONG_UNLINK 300
/**
* Time interval of shrink, if the client is "idle" more than this interval,
#define OBD_FAIL_MDS_GET_ROOT_NET 0x11b
#define OBD_FAIL_MDS_GET_ROOT_PACK 0x11c
#define OBD_FAIL_MDS_STATFS_PACK 0x11d
+#define OBD_FAIL_MDS_STATFS_SUM_PACK 0x11d
#define OBD_FAIL_MDS_STATFS_NET 0x11e
+#define OBD_FAIL_MDS_STATFS_SUM_NET 0x11e
#define OBD_FAIL_MDS_GETATTR_NAME_NET 0x11f
#define OBD_FAIL_MDS_PIN_NET 0x120
#define OBD_FAIL_MDS_UNPIN_NET 0x121
#define OBD_FAIL_MDS_REINT_MULTI_NET_REP 0x15a
#define OBD_FAIL_MDS_LLOG_CREATE_FAILED2 0x15b
#define OBD_FAIL_MDS_FLD_LOOKUP 0x15c
+#define OBD_FAIL_MDS_CHANGELOG_REORDER 0x15d
+#define OBD_FAIL_MDS_LLOG_UMOUNT_RACE 0x15e
#define OBD_FAIL_MDS_INTENT_DELAY 0x160
#define OBD_FAIL_MDS_XATTR_REP 0x161
#define OBD_FAIL_MDS_TRACK_OVERFLOW 0x162
#define OBD_FAIL_MDS_LOV_CREATE_RACE 0x163
#define OBD_FAIL_MDS_HSM_CDT_DELAY 0x164
+#define OBD_FAIL_MDS_ORPHAN_DELETE 0x165
+#define OBD_FAIL_MDS_RMFID_NET 0x166
+#define OBD_FAIL_MDS_CREATE_RACE 0x167
+#define OBD_FAIL_MDS_STATFS_SPOOF 0x168
+#define OBD_FAIL_MDS_REINT_OPEN 0x169
+#define OBD_FAIL_MDS_REINT_OPEN2 0x16a
+#define OBD_FAIL_MDS_COMMITRW_DELAY 0x16b
/* layout lock */
#define OBD_FAIL_MDS_NO_LL_GETATTR 0x170
#define OBD_FAIL_MDS_RECOVERY_ACCEPTS_GAPS 0x185
#define OBD_FAIL_MDS_GET_INFO_NET 0x186
#define OBD_FAIL_MDS_DQACQ_NET 0x187
+#define OBD_FAIL_MDS_STRIPE_CREATE 0x188
+#define OBD_FAIL_MDS_STRIPE_FID 0x189
/* OI scrub */
#define OBD_FAIL_OSD_SCRUB_DELAY 0x190
#define OBD_FAIL_OSD_OST_EA_FID_SET 0x197
#define OBD_FAIL_OSD_NO_OI_ENTRY 0x198
#define OBD_FAIL_OSD_INDEX_CRASH 0x199
+#define OBD_FAIL_OSD_TXN_START 0x19a
+#define OBD_FAIL_OSD_DUPLICATE_MAP 0x19b
+#define OBD_FAIL_OSD_REF_DEL 0x19c
+#define OBD_FAIL_OSD_OI_ENOSPC 0x19d
+#define OBD_FAIL_OSD_DOTDOT_ENOSPC 0x19e
#define OBD_FAIL_OFD_SET_OID 0x1e0
#define OBD_FAIL_OST_STATFS_EINPROGRESS 0x231
#define OBD_FAIL_OST_SET_INFO_NET 0x232
#define OBD_FAIL_OST_NODESTROY 0x233
-#define OBD_FAIL_OST_READ_SIZE 0x234
+/* OBD_FAIL_OST_READ_SIZE 0x234 obsolete since 2.14 */
#define OBD_FAIL_OST_LADVISE_NET 0x235
#define OBD_FAIL_OST_PAUSE_PUNCH 0x236
#define OBD_FAIL_OST_LADVISE_PAUSE 0x237
#define OBD_FAIL_OST_SKIP_LV_CHECK 0x241
#define OBD_FAIL_OST_STATFS_DELAY 0x242
#define OBD_FAIL_OST_INTEGRITY_FAULT 0x243
+#define OBD_FAIL_OST_INTEGRITY_CMP 0x244
+#define OBD_FAIL_OST_DISCONNECT_DELAY 0x245
+#define OBD_FAIL_OST_DELAY_TRANS 0x246
+#define OBD_FAIL_OST_PREPARE_DELAY 0x247
+#define OBD_FAIL_OST_2BIG_NIOBUF 0x248
+#define OBD_FAIL_OST_FALLOCATE_NET 0x249
+#define OBD_FAIL_OST_SEEK_NET 0x24a
+#define OBD_FAIL_OST_WR_ATTR_DELAY 0x250
+#define OBD_FAIL_OST_RESTART_IO 0x251
#define OBD_FAIL_LDLM 0x300
#define OBD_FAIL_LDLM_NAMESPACE_NEW 0x301
-#define OBD_FAIL_LDLM_ENQUEUE_NET 0x302
-#define OBD_FAIL_LDLM_CONVERT_NET 0x303
-#define OBD_FAIL_LDLM_CANCEL_NET 0x304
-#define OBD_FAIL_LDLM_BL_CALLBACK_NET 0x305
-#define OBD_FAIL_LDLM_CP_CALLBACK_NET 0x306
-#define OBD_FAIL_LDLM_GL_CALLBACK_NET 0x307
+#define OBD_FAIL_LDLM_ENQUEUE_NET 0x302
+#define OBD_FAIL_LDLM_CONVERT_NET 0x303
+#define OBD_FAIL_LDLM_CANCEL_NET 0x304
+#define OBD_FAIL_LDLM_BL_CALLBACK_NET 0x305
+#define OBD_FAIL_LDLM_CP_CALLBACK_NET 0x306
+#define OBD_FAIL_LDLM_GL_CALLBACK_NET 0x307
#define OBD_FAIL_LDLM_ENQUEUE_EXTENT_ERR 0x308
#define OBD_FAIL_LDLM_ENQUEUE_INTENT_ERR 0x309
#define OBD_FAIL_LDLM_CREATE_RESOURCE 0x30a
#define OBD_FAIL_LDLM_SRV_GL_AST 0x326
#define OBD_FAIL_LDLM_WATERMARK_LOW 0x327
#define OBD_FAIL_LDLM_WATERMARK_HIGH 0x328
+#define OBD_FAIL_LDLM_PAUSE_CANCEL_LOCAL 0x329
#define OBD_FAIL_LDLM_GRANT_CHECK 0x32a
#define OBD_FAIL_LDLM_PROLONG_PAUSE 0x32b
+#define OBD_FAIL_LDLM_LOCAL_CANCEL_PAUSE 0x32c
+#define OBD_FAIL_LDLM_LOCK_REPLAY 0x32d
/* LOCKLESS IO */
#define OBD_FAIL_LDLM_SET_CONTENTION 0x385
#define OBD_FAIL_OSC_DELAY_SETTIME 0x412
#define OBD_FAIL_OSC_CONNECT_GRANT_PARAM 0x413
#define OBD_FAIL_OSC_DELAY_IO 0x414
+#define OBD_FAIL_OSC_NO_SIZE_DATA 0x415
+#define OBD_FAIL_OSC_DELAY_CANCEL 0x416
#define OBD_FAIL_PTLRPC 0x500
#define OBD_FAIL_PTLRPC_ACK 0x501
#define OBD_FAIL_PTLRPC_LONG_BOTH_UNLINK 0x51c
#define OBD_FAIL_PTLRPC_CLIENT_BULK_CB3 0x520
#define OBD_FAIL_PTLRPC_BULK_ATTACH 0x521
+#define OBD_FAIL_PTLRPC_BULK_REPLY_ATTACH 0x522
+#define OBD_FAIL_PTLRPC_RESEND_RACE 0x525
+#define OBD_FAIL_PTLRPC_ROUND_XID 0x530
+#define OBD_FAIL_PTLRPC_CONNECT_RACE 0x531
+#define OBD_FAIL_NET_ERROR_RPC 0x532
#define OBD_FAIL_OBD_PING_NET 0x600
/* OBD_FAIL_OBD_LOG_CANCEL_NET 0x601 obsolete since 1.5 */
#define OBD_FAIL_OBD_IDX_READ_BREAK 0x608
#define OBD_FAIL_OBD_NO_LRU 0x609
#define OBD_FAIL_OBDCLASS_MODULE_LOAD 0x60a
+#define OBD_FAIL_OBD_ZERO_NLINK_RACE 0x60b
+#define OBD_FAIL_OBD_STOP_MDS_RACE 0x60c
+#define OBD_FAIL_OBD_SETUP 0x60d
#define OBD_FAIL_TGT_REPLY_NET 0x700
#define OBD_FAIL_TGT_CONN_RACE 0x701
#define OBD_FAIL_TGT_RCVD_EIO 0x720
#define OBD_FAIL_TGT_RECOVERY_REQ_RACE 0x721
#define OBD_FAIL_TGT_REPLY_DATA_RACE 0x722
+#define OBD_FAIL_TGT_RECOVERY_CONNECT 0x724
+#define OBD_FAIL_TGT_NO_GRANT 0x725
#define OBD_FAIL_MDC_REVALIDATE_PAUSE 0x800
#define OBD_FAIL_MDC_ENQUEUE_PAUSE 0x801
#define OBD_FAIL_MDC_OLD_EXT_FLAGS 0x802
#define OBD_FAIL_MDC_GETATTR_ENQUEUE 0x803
-#define OBD_FAIL_MDC_RPCS_SEM 0x804
+#define OBD_FAIL_MDC_RPCS_SEM 0x804 /* deprecated */
#define OBD_FAIL_MDC_LIGHTWEIGHT 0x805
#define OBD_FAIL_MDC_CLOSE 0x806
#define OBD_FAIL_MDC_MERGE 0x807
+#define OBD_FAIL_MDC_GLIMPSE_DDOS 0x808
#define OBD_FAIL_MGS 0x900
#define OBD_FAIL_MGS_ALL_REQUEST_NET 0x901
#define OBD_FAIL_QUOTA_EDQUOT 0xA02
#define OBD_FAIL_QUOTA_DELAY_REINT 0xA03
#define OBD_FAIL_QUOTA_RECOVERABLE_ERR 0xA04
+#define OBD_FAIL_QUOTA_INIT 0xA05
#define OBD_FAIL_LPROC_REMOVE 0xB00
#define OBD_FAIL_FLD 0x1100
#define OBD_FAIL_FLD_QUERY_NET 0x1101
#define OBD_FAIL_FLD_READ_NET 0x1102
+#define OBD_FAIL_FLD_QUERY_REQ 0x1103
#define OBD_FAIL_SEC_CTX 0x1200
#define OBD_FAIL_SEC_CTX_INIT_NET 0x1201
#define OBD_FAIL_TIME_IN_CHLOG_USER 0x1314
#define CFS_FAIL_CHLOG_USER_REG_UNREG_RACE 0x1315
#define OBD_FAIL_FORCE_GC_THREAD 0x1316
+#define OBD_FAIL_LLOG_PROCESS_TIMEOUT 0x1317
+#define OBD_FAIL_LLOG_PURGE_DELAY 0x1318
+#define OBD_FAIL_PLAIN_RECORDS 0x1319
+#define OBD_FAIL_CATALOG_FULL_CHECK 0x131a
+#define OBD_FAIL_CATLIST 0x131b
#define OBD_FAIL_LLITE 0x1400
#define OBD_FAIL_LLITE_FAULT_TRUNC_RACE 0x1401
#define OBD_FAIL_LLITE_NEWNODE_PAUSE 0x140a
#define OBD_FAIL_LLITE_SETDIRSTRIPE_PAUSE 0x140b
#define OBD_FAIL_LLITE_CREATE_NODE_PAUSE 0x140c
-#define OBD_FAIL_LLITE_PTASK_IO_FAIL 0x140d
#define OBD_FAIL_LLITE_IMUTEX_SEC 0x140e
#define OBD_FAIL_LLITE_IMUTEX_NOSEC 0x140f
+#define OBD_FAIL_LLITE_OPEN_BY_NAME 0x1410
+#define OBD_FAIL_LLITE_PCC_FAKE_ERROR 0x1411
+#define OBD_FAIL_LLITE_PCC_DETACH_MKWRITE 0x1412
+#define OBD_FAIL_LLITE_PCC_MKWRITE_PAUSE 0x1413
+#define OBD_FAIL_LLITE_PCC_ATTACH_PAUSE 0x1414
+#define OBD_FAIL_LLITE_SHORT_COMMIT 0x1415
+#define OBD_FAIL_LLITE_CREATE_FILE_PAUSE2 0x1416
#define OBD_FAIL_FID_INDIR 0x1501
#define OBD_FAIL_FID_INLMA 0x1502
#define OBD_FAIL_LARGE_STRIPE 0x1703
#define OBD_FAIL_OUT_ENOSPC 0x1704
#define OBD_FAIL_INVALIDATE_UPDATE 0x1705
+#define OBD_FAIL_OUT_UPDATE_DROP 0x1707
+#define OBD_FAIL_OUT_OBJECT_MISS 0x1708
/* MIGRATE */
-#define OBD_FAIL_MIGRATE_NET_REP 0x1800
#define OBD_FAIL_MIGRATE_ENTRIES 0x1801
-#define OBD_FAIL_MIGRATE_LINKEA 0x1802
-#define OBD_FAIL_MIGRATE_DELAY 0x1803
/* LMV */
#define OBD_FAIL_UNKNOWN_LMV_STRIPE 0x1901
#define OBD_FAIL_OSP_CHECK_INVALID_REC 0x2100
#define OBD_FAIL_OSP_CHECK_ENOMEM 0x2101
#define OBD_FAIL_OSP_FAKE_PRECREATE 0x2102
+#define OBD_FAIL_OSP_RPCS_SEM 0x2104
+#define OBD_FAIL_OSP_CANT_PROCESS_LLOG 0x2105
+#define OBD_FAIL_OSP_INVALID_LOGID 0x2106
+#define OBD_FAIL_OSP_CON_EVENT_DELAY 0x2107
+#define OBD_FAIL_OSP_PRECREATE_PAUSE 0x2108
- /* barrier */
+/* barrier */
#define OBD_FAIL_MGS_BARRIER_READ_NET 0x2200
#define OBD_FAIL_MGS_BARRIER_NOTIFY_NET 0x2201
#define OBD_FAIL_OSD_FAIL_AT_TRUNCATE 0x2301
+/* LNet is allocated failure locations 0xe000 to 0xffff */
/* Assign references to moved code to reduce code changes */
-#define OBD_FAIL_PRECHECK(id) CFS_FAIL_PRECHECK(id)
+#define OBD_FAIL_PRECHECK(id) (unlikely(CFS_FAIL_PRECHECK(id)))
#define OBD_FAIL_CHECK(id) CFS_FAIL_CHECK(id)
#define OBD_FAIL_CHECK_VALUE(id, value) CFS_FAIL_CHECK_VALUE(id, value)
#define OBD_FAIL_CHECK_ORSET(id, value) CFS_FAIL_CHECK_ORSET(id, value)
#define LUT_FAIL_MDT LUT_FAIL_CLASS(OBD_FAIL_MDS)
#define LUT_FAIL_OST LUT_FAIL_CLASS(OBD_FAIL_OST)
-extern atomic_t libcfs_kmemory;
+extern atomic64_t libcfs_kmem;
#ifdef CONFIG_PROC_FS
#define obd_memory_add(size) \
LASSERT(ptr); \
obd_memory_sub(size); \
CDEBUG(D_MALLOC, name " '" #ptr "': %d at %p.\n", \
- (int)(size), ptr); \
- POISON(ptr, 0x5a, size)
+ (int)(size), ptr);
#else /* !OBD_DEBUG_MEMUSAGE */
#define __OBD_MALLOC_VERBOSE(ptr, cptab, cpt, size, flags) \
do { \
- (ptr) = (cptab) == NULL ? \
- kmalloc(size, (flags) | __GFP_ZERO) : \
- cfs_cpt_malloc(cptab, cpt, size, (flags) | __GFP_ZERO); \
- if (likely((ptr) != NULL)) \
- OBD_ALLOC_POST(ptr, size, "kmalloced"); \
+ if (cptab) \
+ ptr = cfs_cpt_malloc((cptab), (cpt), (size), \
+ (flags) | __GFP_ZERO | __GFP_NOWARN); \
+ if (!(cptab) || unlikely(!(ptr))) /* retry without CPT if failure */ \
+ ptr = kmalloc(size, (flags) | __GFP_ZERO); \
+ if (likely((ptr) != NULL)) \
+ OBD_ALLOC_POST((ptr), (size), "kmalloced"); \
} while (0)
#define OBD_ALLOC_GFP(ptr, size, gfp_mask) \
#define OBD_ALLOC(ptr, size) OBD_ALLOC_GFP(ptr, size, GFP_NOFS)
#define OBD_ALLOC_WAIT(ptr, size) OBD_ALLOC_GFP(ptr, size, GFP_KERNEL)
-#define OBD_ALLOC_PTR(ptr) OBD_ALLOC(ptr, sizeof *(ptr))
-#define OBD_ALLOC_PTR_WAIT(ptr) OBD_ALLOC_WAIT(ptr, sizeof *(ptr))
+#define OBD_ALLOC_PTR(ptr) OBD_ALLOC(ptr, sizeof(*(ptr)))
+#define OBD_ALLOC_PTR_WAIT(ptr) OBD_ALLOC_WAIT(ptr, sizeof(*(ptr)))
+#define OBD_ALLOC_PTR_ARRAY(ptr, n) OBD_ALLOC(ptr, (n) * sizeof(*(ptr)))
+#define OBD_ALLOC_PTR_ARRAY_WAIT(ptr, n) \
+ OBD_ALLOC_WAIT(ptr, (n) * sizeof(*(ptr)))
#define OBD_CPT_ALLOC_GFP(ptr, cptab, cpt, size, gfp_mask) \
__OBD_MALLOC_VERBOSE(ptr, cptab, cpt, size, gfp_mask)
OBD_CPT_ALLOC_GFP(ptr, cptab, cpt, size, GFP_NOFS)
#define OBD_CPT_ALLOC_PTR(ptr, cptab, cpt) \
- OBD_CPT_ALLOC(ptr, cptab, cpt, sizeof *(ptr))
+ OBD_CPT_ALLOC(ptr, cptab, cpt, sizeof(*(ptr)))
/* Direct use of __vmalloc() allows for protection flag specification
* (and particularly to not set __GFP_FS, which is likely to cause some
if (unlikely((ptr) == NULL)) { \
CERROR("vmalloc of '" #ptr "' (%d bytes) failed\n", \
(int)(size)); \
- CERROR("%llu total bytes allocated by Lustre, %d by LNET\n", \
- obd_memory_sum(), atomic_read(&libcfs_kmemory)); \
+ CERROR("%llu total bytes allocated by Lustre, %lld by LNET\n",\
+ obd_memory_sum(), libcfs_kmem_read());\
} else { \
OBD_ALLOC_POST(ptr, size, "vmalloced"); \
} \
OBD_VMALLOC(ptr, size); \
} while (0)
+#define OBD_ALLOC_PTR_ARRAY_LARGE(ptr, n) \
+ OBD_ALLOC_LARGE(ptr, (n) * sizeof(*(ptr)))
+
#define OBD_CPT_ALLOC_LARGE(ptr, cptab, cpt, size) \
do { \
OBD_CPT_ALLOC_GFP(ptr, cptab, cpt, size, GFP_NOFS | __GFP_NOWARN); \
#define OBD_FREE(ptr, size) \
do { \
OBD_FREE_PRE(ptr, size, "kfreed"); \
+ POISON(ptr, 0x5a, size); \
kfree(ptr); \
POISON_PTR(ptr); \
} while (0)
do { \
if (is_vmalloc_addr(ptr)) { \
OBD_FREE_PRE(ptr, size, "vfreed"); \
- vfree(ptr); \
+ POISON(ptr, 0x5a, size); \
+ libcfs_vfree_atomic(ptr); \
POISON_PTR(ptr); \
} else { \
OBD_FREE(ptr, size); \
} \
} while (0)
-#define OBD_FREE_RCU(ptr, size, handle) \
-do { \
- struct portals_handle *__h = (handle); \
- \
- LASSERT(handle != NULL); \
- __h->h_cookie = (unsigned long)(ptr); \
- __h->h_size = (size); \
- call_rcu(&__h->h_rcu, class_handle_free_cb); \
- POISON_PTR(ptr); \
-} while(0)
+#define OBD_FREE_PTR_ARRAY_LARGE(ptr, n) \
+ OBD_FREE_LARGE(ptr, (n) * sizeof(*(ptr)))
/* we memset() the slab object to 0 when allocation succeeds, so DO NOT
* HAVE A CTOR THAT DOES ANYTHING. its work will be cleared here. we'd
do { \
LASSERT(ergo((type) != GFP_ATOMIC, !in_interrupt())); \
(ptr) = (cptab) == NULL ? \
- kmem_cache_alloc(slab, (type) | __GFP_ZERO) : \
+ kmem_cache_zalloc(slab, (type)) : \
cfs_mem_cache_cpt_alloc(slab, cptab, cpt, (type) | __GFP_ZERO); \
if (likely((ptr))) \
OBD_ALLOC_POST(ptr, size, "slab-alloced"); \
#define OBD_SLAB_CPT_ALLOC_GFP(ptr, slab, cptab, cpt, size, flags) \
__OBD_SLAB_ALLOC_VERBOSE(ptr, slab, cptab, cpt, size, flags)
-#define OBD_FREE_PTR(ptr) OBD_FREE(ptr, sizeof *(ptr))
+#define OBD_FREE_PTR(ptr) OBD_FREE(ptr, sizeof(*(ptr)))
+#define OBD_FREE_PTR_ARRAY(ptr, n) OBD_FREE(ptr, (n) * sizeof(*(ptr)))
#define OBD_SLAB_FREE(ptr, slab, size) \
do { \
OBD_FREE_PRE(ptr, size, "slab-freed"); \
+ POISON(ptr, 0x5a, size); \
kmem_cache_free(slab, ptr); \
POISON_PTR(ptr); \
} while(0)
OBD_SLAB_CPT_ALLOC_GFP(ptr, slab, cptab, cpt, size, GFP_NOFS)
#define OBD_SLAB_ALLOC_PTR(ptr, slab) \
- OBD_SLAB_ALLOC(ptr, slab, sizeof *(ptr))
+ OBD_SLAB_ALLOC(ptr, slab, sizeof(*(ptr)))
#define OBD_SLAB_CPT_ALLOC_PTR(ptr, slab, cptab, cpt) \
- OBD_SLAB_CPT_ALLOC(ptr, slab, cptab, cpt, sizeof *(ptr))
+ OBD_SLAB_CPT_ALLOC(ptr, slab, cptab, cpt, sizeof(*(ptr)))
#define OBD_SLAB_ALLOC_PTR_GFP(ptr, slab, flags) \
- OBD_SLAB_ALLOC_GFP(ptr, slab, sizeof *(ptr), flags)
+ OBD_SLAB_ALLOC_GFP(ptr, slab, sizeof(*(ptr)), flags)
#define OBD_SLAB_CPT_ALLOC_PTR_GFP(ptr, slab, cptab, cpt, flags) \
- OBD_SLAB_CPT_ALLOC_GFP(ptr, slab, cptab, cpt, sizeof *(ptr), flags)
+ OBD_SLAB_CPT_ALLOC_GFP(ptr, slab, cptab, cpt, sizeof(*(ptr)), flags)
#define OBD_SLAB_FREE_PTR(ptr, slab) \
- OBD_SLAB_FREE((ptr), (slab), sizeof *(ptr))
+ OBD_SLAB_FREE((ptr), (slab), sizeof(*(ptr)))
#define KEY_IS(str) \
(keylen >= (sizeof(str)-1) && memcmp(key, str, (sizeof(str)-1)) == 0)
static inline int lma_to_lustre_flags(__u32 lma_flags)
{
- return (lma_flags & LMAI_ORPHAN) ? LUSTRE_ORPHAN_FL : 0;
+ return (((lma_flags & LMAI_ORPHAN) ? LUSTRE_ORPHAN_FL : 0) |
+ ((lma_flags & LMAI_ENCRYPT) ? LUSTRE_ENCRYPT_FL : 0));
}
static inline int lustre_to_lma_flags(__u32 la_flags)
{
- return (la_flags & LUSTRE_ORPHAN_FL) ? LMAI_ORPHAN : 0;
+ return (((la_flags & LUSTRE_ORPHAN_FL) ? LMAI_ORPHAN : 0) |
+ ((la_flags & LUSTRE_ENCRYPT_FL) ? LMAI_ENCRYPT : 0));
}
+/* Convert wire LUSTRE_*_FL to corresponding client local VFS S_* values
+ * for the client inode i_flags. The LUSTRE_*_FL are the Lustre wire
+ * protocol equivalents of LDISKFS_*_FL values stored on disk, while
+ * the S_* flags are kernel-internal values that change between kernel
+ * versions. These flags are set/cleared via FSFILT_IOC_{GET,SET}_FLAGS.
+ * See b=16526 for a full history.
+ */
+static inline int ll_ext_to_inode_flags(int ext_flags)
+{
+ return (((ext_flags & LUSTRE_SYNC_FL) ? S_SYNC : 0) |
+ ((ext_flags & LUSTRE_NOATIME_FL) ? S_NOATIME : 0) |
+ ((ext_flags & LUSTRE_APPEND_FL) ? S_APPEND : 0) |
+ ((ext_flags & LUSTRE_DIRSYNC_FL) ? S_DIRSYNC : 0) |
+#if defined(S_ENCRYPTED)
+ ((ext_flags & LUSTRE_ENCRYPT_FL) ? S_ENCRYPTED : 0) |
+#endif
+ ((ext_flags & LUSTRE_IMMUTABLE_FL) ? S_IMMUTABLE : 0));
+}
+
+static inline int ll_inode_to_ext_flags(int inode_flags)
+{
+ return (((inode_flags & S_SYNC) ? LUSTRE_SYNC_FL : 0) |
+ ((inode_flags & S_NOATIME) ? LUSTRE_NOATIME_FL : 0) |
+ ((inode_flags & S_APPEND) ? LUSTRE_APPEND_FL : 0) |
+ ((inode_flags & S_DIRSYNC) ? LUSTRE_DIRSYNC_FL : 0) |
+#if defined(S_ENCRYPTED)
+ ((inode_flags & S_ENCRYPTED) ? LUSTRE_ENCRYPT_FL : 0) |
+#endif
+ ((inode_flags & S_IMMUTABLE) ? LUSTRE_IMMUTABLE_FL : 0));
+}
+
+struct obd_heat_instance {
+ __u64 ohi_heat;
+ __u64 ohi_time_second;
+ __u64 ohi_count;
+};
+
+/* Define a fixed 4096-byte encryption unit size */
+#define LUSTRE_ENCRYPTION_BLOCKBITS 12
+#define LUSTRE_ENCRYPTION_UNIT_SIZE ((size_t)1 << LUSTRE_ENCRYPTION_BLOCKBITS)
+#define LUSTRE_ENCRYPTION_MASK (~(LUSTRE_ENCRYPTION_UNIT_SIZE - 1))
+
#endif