[PATCH 08/17] lustre/recovery: free open/close request promptly
From: Hongchao Zhang - For the non-create open or committed open, the open request should be freed along with the close request as soon as the close done, despite that the transno of open/close is greater than the last committed transno known by client or not. - Move the committed open request into another dedicated list, that will avoid scanning a huge replay list on receiving each reply (when there are many open files). Signed-off-by: Niu Yawei Signed-off-by: Hongchao Zhang Reviewed-on: http://review.whamcloud.com/6665 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2613 Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin Signed-off-by: Oleg Drokin --- .../lustre/lustre/include/lustre/lustre_idl.h | 6 +- .../staging/lustre/lustre/include/lustre_export.h | 9 +++ .../staging/lustre/lustre/include/lustre_import.h | 11 +++ drivers/staging/lustre/lustre/include/lustre_net.h | 2 + drivers/staging/lustre/lustre/include/obd.h| 5 +- drivers/staging/lustre/lustre/include/obd_class.h | 4 +- drivers/staging/lustre/lustre/llite/file.c | 2 +- drivers/staging/lustre/lustre/llite/llite_lib.c| 3 +- drivers/staging/lustre/lustre/lmv/lmv_obd.c| 4 +- drivers/staging/lustre/lustre/mdc/mdc_internal.h | 2 +- drivers/staging/lustre/lustre/mdc/mdc_locks.c | 2 +- drivers/staging/lustre/lustre/mdc/mdc_reint.c | 1 + drivers/staging/lustre/lustre/mdc/mdc_request.c| 27 +++- drivers/staging/lustre/lustre/obdclass/genops.c| 2 + .../lustre/lustre/obdclass/lprocfs_status.c| 1 + drivers/staging/lustre/lustre/ptlrpc/client.c | 78 +- drivers/staging/lustre/lustre/ptlrpc/import.c | 33 ++--- drivers/staging/lustre/lustre/ptlrpc/recover.c | 57 +--- 18 files changed, 198 insertions(+), 51 deletions(-) diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 4c70c06..a55eebf 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -1305,6 +1305,7 @@ extern void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb); #define OBD_CONNECT_SHORTIO 0x2ULL/* short io */ #define OBD_CONNECT_PINGLESS 0x4ULL/* pings not required */ #define OBD_CONNECT_FLOCK_DEAD 0x8ULL/* flock deadlock detection */ +#define OBD_CONNECT_DISP_STRIPE 0x10ULL/*create stripe disposition*/ /* XXX README XXX: * Please DO NOT add flag values here before first ensuring that this same @@ -1344,7 +1345,9 @@ extern void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb); OBD_CONNECT_LIGHTWEIGHT | OBD_CONNECT_UMASK | \ OBD_CONNECT_LVB_TYPE | OBD_CONNECT_LAYOUTLOCK |\ OBD_CONNECT_PINGLESS | OBD_CONNECT_MAX_EASIZE |\ - OBD_CONNECT_FLOCK_DEAD) + OBD_CONNECT_FLOCK_DEAD | \ + OBD_CONNECT_DISP_STRIPE) + #define OST_CONNECT_SUPPORTED (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \ OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \ OBD_CONNECT_TRUNCLOCK | OBD_CONNECT_INDEX | \ @@ -2114,6 +2117,7 @@ extern void lustre_swab_generic_32s (__u32 *val); #define DISP_ENQ_CREATE_REF 0x0100 #define DISP_OPEN_LOCK 0x0200 #define DISP_OPEN_LEASE 0x0400 +#define DISP_OPEN_STRIPE 0x0800 /* INODE LOCK PARTS */ #define MDS_INODELOCK_LOOKUP 0x01 /* For namespace, dentry etc, and also diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index 82a230b..6f7f48c 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -388,6 +388,15 @@ static inline __u64 exp_connect_ibits(struct obd_export *exp) return ocd->ocd_ibits_known; } +static inline bool imp_connect_disp_stripe(struct obd_import *imp) +{ + struct obd_connect_data *ocd; + + LASSERT(imp != NULL); + ocd = >imp_connect_data; + return ocd->ocd_connect_flags & OBD_CONNECT_DISP_STRIPE; +} + extern struct obd_export *class_conn2export(struct lustre_handle *conn); extern struct obd_device *class_conn2obd(struct lustre_handle *conn); diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 67259eb..e9833ae 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -180,6 +180,17 @@ struct obd_import { struct list_headimp_delayed_list; /** @} */ + /** +* List of requests that are retained for committed open replay. Once +
[PATCH 08/17] lustre/recovery: free open/close request promptly
From: Hongchao Zhang hongchao.zh...@intel.com - For the non-create open or committed open, the open request should be freed along with the close request as soon as the close done, despite that the transno of open/close is greater than the last committed transno known by client or not. - Move the committed open request into another dedicated list, that will avoid scanning a huge replay list on receiving each reply (when there are many open files). Signed-off-by: Niu Yawei yawei@intel.com Signed-off-by: Hongchao Zhang hongchao.zh...@intel.com Reviewed-on: http://review.whamcloud.com/6665 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2613 Reviewed-by: Alex Zhuravlev alexey.zhurav...@intel.com Reviewed-by: Oleg Drokin oleg.dro...@intel.com Signed-off-by: Oleg Drokin oleg.dro...@intel.com --- .../lustre/lustre/include/lustre/lustre_idl.h | 6 +- .../staging/lustre/lustre/include/lustre_export.h | 9 +++ .../staging/lustre/lustre/include/lustre_import.h | 11 +++ drivers/staging/lustre/lustre/include/lustre_net.h | 2 + drivers/staging/lustre/lustre/include/obd.h| 5 +- drivers/staging/lustre/lustre/include/obd_class.h | 4 +- drivers/staging/lustre/lustre/llite/file.c | 2 +- drivers/staging/lustre/lustre/llite/llite_lib.c| 3 +- drivers/staging/lustre/lustre/lmv/lmv_obd.c| 4 +- drivers/staging/lustre/lustre/mdc/mdc_internal.h | 2 +- drivers/staging/lustre/lustre/mdc/mdc_locks.c | 2 +- drivers/staging/lustre/lustre/mdc/mdc_reint.c | 1 + drivers/staging/lustre/lustre/mdc/mdc_request.c| 27 +++- drivers/staging/lustre/lustre/obdclass/genops.c| 2 + .../lustre/lustre/obdclass/lprocfs_status.c| 1 + drivers/staging/lustre/lustre/ptlrpc/client.c | 78 +- drivers/staging/lustre/lustre/ptlrpc/import.c | 33 ++--- drivers/staging/lustre/lustre/ptlrpc/recover.c | 57 +--- 18 files changed, 198 insertions(+), 51 deletions(-) diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 4c70c06..a55eebf 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -1305,6 +1305,7 @@ extern void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb); #define OBD_CONNECT_SHORTIO 0x2ULL/* short io */ #define OBD_CONNECT_PINGLESS 0x4ULL/* pings not required */ #define OBD_CONNECT_FLOCK_DEAD 0x8ULL/* flock deadlock detection */ +#define OBD_CONNECT_DISP_STRIPE 0x10ULL/*create stripe disposition*/ /* XXX README XXX: * Please DO NOT add flag values here before first ensuring that this same @@ -1344,7 +1345,9 @@ extern void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb); OBD_CONNECT_LIGHTWEIGHT | OBD_CONNECT_UMASK | \ OBD_CONNECT_LVB_TYPE | OBD_CONNECT_LAYOUTLOCK |\ OBD_CONNECT_PINGLESS | OBD_CONNECT_MAX_EASIZE |\ - OBD_CONNECT_FLOCK_DEAD) + OBD_CONNECT_FLOCK_DEAD | \ + OBD_CONNECT_DISP_STRIPE) + #define OST_CONNECT_SUPPORTED (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \ OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \ OBD_CONNECT_TRUNCLOCK | OBD_CONNECT_INDEX | \ @@ -2114,6 +2117,7 @@ extern void lustre_swab_generic_32s (__u32 *val); #define DISP_ENQ_CREATE_REF 0x0100 #define DISP_OPEN_LOCK 0x0200 #define DISP_OPEN_LEASE 0x0400 +#define DISP_OPEN_STRIPE 0x0800 /* INODE LOCK PARTS */ #define MDS_INODELOCK_LOOKUP 0x01 /* For namespace, dentry etc, and also diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index 82a230b..6f7f48c 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -388,6 +388,15 @@ static inline __u64 exp_connect_ibits(struct obd_export *exp) return ocd-ocd_ibits_known; } +static inline bool imp_connect_disp_stripe(struct obd_import *imp) +{ + struct obd_connect_data *ocd; + + LASSERT(imp != NULL); + ocd = imp-imp_connect_data; + return ocd-ocd_connect_flags OBD_CONNECT_DISP_STRIPE; +} + extern struct obd_export *class_conn2export(struct lustre_handle *conn); extern struct obd_device *class_conn2obd(struct lustre_handle *conn); diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 67259eb..e9833ae 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -180,6 +180,17 @@ struct obd_import { struct list_head