staging/lustre: Intel tree sync and two fixups
cover staging/lustre: Intel tree sync and two fixups
Hi Greg,
I've fixed up the rest of Intel tree ported patches and rebased them on top of your staging-next. Also I found that the Lustre errno translate code breaks build on non-x86 systems. I've added one patch to fix it. Please queue them if they are OK to you.
Resend after fixing up sender email address...
Thanks,
Tao
John L. Hammond (2):
staging/lustre/llite: handle io init failure in ll_fault_io_init() staging/lustre/obdclass: use a dummy structure for lu_ref_link
Liu Xuezhao (1):
staging/lustre/obdclass: add obd_target.h
Peng Tao (2):
staging/lustre: fix Kconfig bool defaults
staging/lustre: fix build on non-x86
Sebastien Buisson (2):
staging/lustre: fix 'data race condition' issues in at_reset() staging/lustre/llite: fix 'data race condition' issues of lli_flags
Thomas Leibovici (1):
staging/lustre/lmv: support DNE with HSM.
drivers/staging/lustre/lustre/Kconfig | 2 +- drivers/staging/lustre/lustre/include/cl_object.h | 10 +- .../lustre/lustre/include/linux/lustre_fsfilt.h | 10 - .../staging/lustre/lustre/include/lprocfs_status.h | 36 -- drivers/staging/lustre/lustre/include/lu_object.h | 18 +- drivers/staging/lustre/lustre/include/lu_ref.h | 14 +- .../staging/lustre/lustre/include/lustre_import.h | 2 + drivers/staging/lustre/lustre/include/obd.h | 140 +----- drivers/staging/lustre/lustre/llite/llite_lib.c | 4 + drivers/staging/lustre/lustre/llite/llite_mmap.c | 36 +- drivers/staging/lustre/lustre/llite/namei.c | 5 +- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 200 +++++++- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 1 - drivers/staging/lustre/lustre/mdc/mdc_request.c | 18 +- drivers/staging/lustre/lustre/obdclass/Makefile | 2 +- drivers/staging/lustre/lustre/obdclass/cl_io.c | 17 +- drivers/staging/lustre/lustre/obdclass/cl_lock.c | 6 +- drivers/staging/lustre/lustre/obdclass/cl_page.c | 5 +- .../lustre/lustre/obdclass/lprocfs_jobstats.c | 560 -------------------- drivers/staging/lustre/lustre/obdclass/lu_object.c | 15 +- drivers/staging/lustre/lustre/obdclass/obd_mount.c | 1 - drivers/staging/lustre/lustre/osc/osc_cache.c | 8 +- drivers/staging/lustre/lustre/ptlrpc/Makefile | 2 +- drivers/staging/lustre/lustre/ptlrpc/errno.c | 4 +- 24 files changed, 301 insertions(+), 815 deletions(-) delete mode 100644 drivers/staging/lustre/lustre/obdclass/lprocfs_jobstats.c
PATCH 1/8 staging/lustre/lmv: support DNE with HSM.
From: Thomas Leibovici <[email protected]>
Send HSM requests to the appropriate MDT. Split lists of fids of HSM actions into one list per MDT.
Move kuc registration/unregistration from MDC to LMV as this is not MDT related.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3365
Lustre-change: http://review.whamcloud.com/6714
--- drivers/staging/lustre/lustre/lmv/lmv_obd.c | 200 ++++++++++++++++++++++- drivers/staging/lustre/lustre/mdc/mdc_request.c | 18 +-- 2 files changed, 205 insertions(+), 13 deletions(-)
drivers/staging/lustre/lustre/lmv/lmv_obd.c +199 -1
@@ -44,6 +44,7 @@#include <asm/div64.h> #include <linux/seq_file.h> #include <linux/namei.h> +#include <asm/uaccess.h> #include <lustre/lustre_idl.h> #include <obd_support.h>
@@ -783,6 +784,125 @@ out_fid2path:RETURN (rc); } +static int lmv_hsm_req_count (struct lmv_obd *lmv, +const struct hsm_user_request *hur, +const struct lmv_tgt_desc *tgt_mds) +{ +int i, nr =0 ; +struct lmv_tgt_desc *curr_tgt; + +/* count how many requests must be sent to the given target */ +for (i =0 ; i < hur->hur_request.hr_itemcount; i++) { + curr_tgt =lmv_find_target (lmv, &hur->hur_user_item[i].hui_fid); +if (obd_uuid_equals (&curr_tgt->ltd_uuid, &tgt_mds->ltd_uuid)) + nr++; + } +return nr; +} + +static void lmv_hsm_req_build (struct lmv_obd *lmv, +struct hsm_user_request *hur_in, +const struct lmv_tgt_desc *tgt_mds, +struct hsm_user_request *hur_out) +{ +int i, nr_out; +struct lmv_tgt_desc *curr_tgt; + +/* build the hsm_user_request for the given target */ + hur_out->hur_request = hur_in->hur_request; + nr_out =0 ; +for (i =0 ; i < hur_in->hur_request.hr_itemcount; i++) { + curr_tgt =lmv_find_target (lmv, + &hur_in->hur_user_item[i].hui_fid); +if (obd_uuid_equals (&curr_tgt->ltd_uuid, &tgt_mds->ltd_uuid)) { + hur_out->hur_user_item[nr_out] = + hur_in->hur_user_item[i]; + nr_out++; + } + } + hur_out->hur_request.hr_itemcount = nr_out; +memcpy (hur_data (hur_out),hur_data (hur_in), + hur_in->hur_request.hr_data_len); +} + +static int lmv_hsm_ct_unregister (struct lmv_obd *lmv,unsigned int cmd,int len, +struct lustre_kernelcomm *lk,void *uarg) +{ +int i, rc =0 ; +ENTRY ; + +/* unregister request (call from llapi_hsm_copytool_fini) */ +for (i =0 ; i < lmv->desc.ld_tgt_count; i++) { +/* best effort: try to clean as much as possible +* (continue on error) */ +obd_iocontrol (cmd, lmv->tgts[i]->ltd_exp, len, lk, uarg); + } + +/* Whatever the result, remove copytool from kuc groups. +* Unreached coordinators will get EPIPE on next requests +* and will unregister automatically. +*/ + rc =libcfs_kkuc_group_rem (lk->lk_uid, lk->lk_group); +RETURN (rc); +} + +static int lmv_hsm_ct_register (struct lmv_obd *lmv,unsigned int cmd,int len, +struct lustre_kernelcomm *lk,void *uarg) +{ +struct file *filp; +int i, j, err; +int rc =0 ; +bool any_set = false; +ENTRY ; + +/* All or nothing: try to register to all MDS. +* In case of failure, unregister from previous MDS, +* except if it because of inactive target. */ +for (i =0 ; i < lmv->desc.ld_tgt_count; i++) { + err =obd_iocontrol (cmd, lmv->tgts[i]->ltd_exp, + len, lk, uarg); +if (err) { +if (lmv->tgts[i]->ltd_active) { +/* permanent error */ +CERROR ("error: iocontrol MDC %s on MDT" +"idx %d cmd %x: err = %d\n" , + lmv->tgts[i]->ltd_uuid.uuid, + i, cmd, err); + rc = err; + lk->lk_flags |=LK_FLG_STOP ; +/* unregister from previous MDS */ +for (j =0 ; j < i; j++) +obd_iocontrol (cmd, + lmv->tgts[j]->ltd_exp, + len, lk, uarg); +RETURN (rc); + } +/* else: transient error. +* kuc will register to the missing MDT +* when it is back */ + }else { + any_set = true; + } + } + +if (!any_set) +/* no registration done: return error */ +RETURN (-ENOTCONN ); + +/* at least one registration done, with no failure */ + filp =fget (lk->lk_wfd); +if (filp ==NULL ) { +RETURN (-EBADF ); + } + rc =libcfs_kkuc_group_add (filp, lk->lk_uid, lk->lk_group, lk->lk_data); +if (rc !=0 && filp !=NULL ) +fput (filp); +RETURN (rc); +} + + + +static int lmv_iocontrol (unsigned int cmd,struct obd_export *exp,int len,void *karg,void *uarg) {
@@ -908,7 +1028,77 @@ static int lmv_iocontrol(unsigned int cmd, struct obd_export *exp, }case LL_IOC_HSM_STATE_GET :case LL_IOC_HSM_STATE_SET : -case LL_IOC_HSM_ACTION : +case LL_IOC_HSM_ACTION : { +struct md_op_data *op_data = karg; +struct lmv_tgt_desc *tgt; + + tgt =lmv_find_target (lmv, &op_data->op_fid1); +if (IS_ERR (tgt)) +RETURN (PTR_ERR (tgt)); + +if (tgt->ltd_exp ==NULL ) +RETURN (-EINVAL ); + + rc =obd_iocontrol (cmd, tgt->ltd_exp, len, karg, uarg); +break ; + } +case LL_IOC_HSM_PROGRESS : { +const struct hsm_progress_kernel *hpk = karg; +struct lmv_tgt_desc *tgt; + + tgt =lmv_find_target (lmv, &hpk->hpk_fid); +if (IS_ERR (tgt)) +RETURN (PTR_ERR (tgt)); + rc =obd_iocontrol (cmd, tgt->ltd_exp, len, karg, uarg); +break ; + } +case LL_IOC_HSM_REQUEST : { +struct hsm_user_request *hur = karg; +struct lmv_tgt_desc *tgt; +unsigned int reqcount = hur->hur_request.hr_itemcount; + +if (reqcount ==0 ) +RETURN (0 ); + +/* if the request is about a single fid +* or if there is a single MDS, no need to split +* the request. */ +if (reqcount ==1 || count ==1 ) { + tgt =lmv_find_target (lmv, + &hur->hur_user_item[0 ].hui_fid); +if (IS_ERR (tgt)) +RETURN (PTR_ERR (tgt)); + rc =obd_iocontrol (cmd, tgt->ltd_exp, len, karg, uarg); + }else { +/* split fid list to their respective MDS */ +for (i =0 ; i < count; i++) { +unsigned int nr, reqlen; +int rc1; +struct hsm_user_request *req; + + nr =lmv_hsm_req_count (lmv, hur, lmv->tgts[i]); +if (nr ==0 )/* nothing for this MDS */ +continue ; + +/* build a request with fids for this MDS */ + reqlen = offsetof(typeof(*hur), + hur_user_item[nr]) + + hur->hur_request.hr_data_len; +OBD_ALLOC_LARGE (req, reqlen); +if (req ==NULL ) +RETURN (-ENOMEM ); + +lmv_hsm_req_build (lmv, hur, lmv->tgts[i], req); + + rc1 =obd_iocontrol (cmd, lmv->tgts[i]->ltd_exp, + reqlen, req, uarg); +if (rc1 !=0 && rc ==0 ) + rc = rc1; +OBD_FREE_LARGE (req, reqlen); + } + } +break ; + }case LL_IOC_LOV_SWAP_LAYOUTS : {struct md_op_data *op_data = karg;struct lmv_tgt_desc *tgt1, *tgt2;
@@ -931,6 +1121,14 @@ static int lmv_iocontrol(unsigned int cmd, struct obd_export *exp, rc =obd_iocontrol (cmd, tgt1->ltd_exp, len, karg, uarg);break ; } +case LL_IOC_HSM_CT_START : { +struct lustre_kernelcomm *lk = karg; +if (lk->lk_flags &LK_FLG_STOP ) + rc =lmv_hsm_ct_unregister (lmv, cmd, len, lk, uarg); +else + rc =lmv_hsm_ct_register (lmv, cmd, len, lk, uarg); +break ; + }default :for (i =0 ; i < count; i++) {struct obd_device *mdc_obd;
drivers/staging/lustre/lustre/mdc/mdc_request.c +6 -12
@@ -1771,6 +1771,9 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,GOTO (out, rc);case LL_IOC_HSM_CT_START : rc =mdc_ioc_hsm_ct_start (exp, karg); +/* ignore if it was already registered on this MDS. */ +if (rc == -EEXIST ) + rc =0 ;GOTO (out, rc);case LL_IOC_HSM_PROGRESS : rc =mdc_ioc_hsm_progress (exp, karg);
@@ -1988,19 +1991,10 @@ static int mdc_ioc_hsm_ct_start(struct obd_export *exp, lk->lk_uid, lk->lk_group, lk->lk_flags);if (lk->lk_flags &LK_FLG_STOP ) { - rc =libcfs_kkuc_group_rem (lk->lk_uid, lk->lk_group);/* Unregister with the coordinator */ -if (rc ==0 ) - rc =mdc_ioc_hsm_ct_unregister (imp); + rc =mdc_ioc_hsm_ct_unregister (imp); }else { -struct file *fp =fget (lk->lk_wfd); - - rc =libcfs_kkuc_group_add (fp, lk->lk_uid, lk->lk_group, - lk->lk_data); -if (rc && fp) -fput (fp); -if (rc ==0 ) - rc =mdc_ioc_hsm_ct_register (imp, archive); + rc =mdc_ioc_hsm_ct_register (imp, archive); }return rc;
@@ -2325,7 +2319,7 @@ static int mdc_import_event(struct obd_device *obd, struct obd_import *imp, }case IMP_EVENT_ACTIVE : rc =obd_notify_observer (obd, obd,OBD_NOTIFY_ACTIVE ,NULL ); -/* restore re-establish kuc registration after reconnecting */ +/* redo the kuc registration after reconnecting */ if (rc ==0 ) rc =mdc_kuc_reregister (imp);break ;
Signature · 1 line
1.7.1
PATCH 2/8 staging/lustre/llite: handle io init failure in ll_fault_io_init()
In reply to Peng TaoFrom: John L. Hammond <[email protected]>
In ll_fault_io_init(), if cl_io_init() has failed then cleanup and return an ERR_PTR(). This fixes an oops in the page fault handling code when a partially initialized io is used. In ll_page_mkwrite0() do not call cl_io_fini() on an ERR_PTR().
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3487
Lustre-change: http://review.whamcloud.com/6735
--- drivers/staging/lustre/lustre/llite/llite_mmap.c | 36 +++++++++++++--------- 1 files changed, 21 insertions(+), 15 deletions(-)
drivers/staging/lustre/lustre/llite/llite_mmap.c +21 -15
@@ -107,11 +107,12 @@ struct cl_io *ll_fault_io_init(struct vm_area_struct *vma,struct cl_env_nest *nest, pgoff_t index, unsigned long *ra_flags) { - struct file *file = vma->vm_file; -struct inode *inode = file->f_dentry->d_inode; -struct cl_io *io; -struct cl_fault_io *fio; -struct lu_env *env; + struct file *file = vma->vm_file; +struct inode *inode = file->f_dentry->d_inode; +struct cl_io *io; +struct cl_fault_io *fio; +struct lu_env *env; +int rc;ENTRY ; *env_ret =NULL ;
@@ -152,17 +153,22 @@ struct cl_io *ll_fault_io_init(struct vm_area_struct *vma,CDEBUG (D_MMAP ,"vm_flags: %lx (%lu %d)\n" , vma->vm_flags, fio->ft_index, fio->ft_executable); -if (cl_io_init (env, io,CIT_FAULT , io->ci_obj) ==0 ) { + rc =cl_io_init (env, io,CIT_FAULT , io->ci_obj); +if (rc ==0 ) {struct ccc_io *cio =ccc_env_io (env);struct ll_file_data *fd =LUSTRE_FPRIVATE (file);LASSERT (cio->cui_cl.cis_io == io); -/* mmap lock must be MANDATORY -* it has to cache pages. */ +/* mmap lock must be MANDATORY it has to cache +* pages. */ io->ci_lockreq =CILR_MANDATORY ; - - cio->cui_fd = fd; + cio->cui_fd = fd; + }else { +LASSERT (rc <0 ); +cl_io_fini (env, io); +cl_env_nested_put (nest, env); + io =ERR_PTR (rc); }return io;
@@ -190,7 +196,7 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage, result = io->ci_result;if (result <0 ) -GOTO (out, result); +GOTO (out_io, result); io->u.ci_fault.ft_mkwrite =1 ; io->u.ci_fault.ft_writable =1 ;
@@ -252,14 +258,14 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage, }EXIT ; -out: +out_io:cl_io_fini (env, io);cl_env_nested_put (&nest, env); - +out:CDEBUG (D_MMAP ,"%s mkwrite with %d\n" , current->comm, result); -LASSERT (ergo (result ==0 ,PageLocked (vmpage))); -return (result); + +return result; }
Signature · 1 line
1.7.1
PATCH 3/8 staging/lustre: fix 'data race condition' issues in at_reset()
In reply to Peng TaoFrom: Sebastien Buisson <[email protected]>
Fix 'data race condition' defects found by Coverity version 6.5.0:
Data race condition (MISSING_LOCK)
Accessing variable without holding lock. Elsewhere, this variable is accessed with lock held.
at_reset() needs to take at->at_lock before modifying its members.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2744
Lustre-change: http://review.whamcloud.com/6569
--- .../staging/lustre/lustre/include/lustre_import.h | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
drivers/staging/lustre/lustre/include/lustre_import.h +2 -0
@@ -336,9 +336,11 @@ static inline unsigned int at_timeout2est(unsigned int val) }static inline void at_reset (struct adaptive_timeout *at,int val) { +spin_lock (&at->at_lock); at->at_current = val; at->at_worst_ever = val; at->at_worst_time =cfs_time_current_sec (); +spin_unlock (&at->at_lock); }static inline void at_init (struct adaptive_timeout *at,int val,int flags) {memset (at,0 ,sizeof (*at));
Signature · 1 line
1.7.1
PATCH 4/8 staging/lustre/llite: fix 'data race condition' issues of lli_flags
In reply to Peng TaoFrom: Sebastien Buisson <[email protected]>
Fix 'data race condition' defects found by Coverity version 6.5.0:
Data race condition (MISSING_LOCK)
Accessing variable without holding lock. Elsewhere, this variable is accessed with lock held.
lli->lli_flags need to be protected by lli->lli_lock.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2744
Lustre-change: http://review.whamcloud.com/6571
--- drivers/staging/lustre/lustre/llite/llite_lib.c | 4 ++++ drivers/staging/lustre/lustre/llite/namei.c | 5 ++++- 2 files changed, 8 insertions(+), 1 deletions(-)
drivers/staging/lustre/lustre/llite/llite_lib.c +4 -0
@@ -1190,7 +1190,9 @@ void ll_clear_inode(struct inode *inode)LASSERT (lli->lli_opendir_pid ==0 ); } +spin_lock (&lli->lli_lock);ll_i2info (inode)->lli_flags &= ~LLIF_MDS_SIZE_LOCK ; +spin_unlock (&lli->lli_lock);md_null_inode (sbi->ll_md_exp,ll_inode2fid (inode));LASSERT (!lli->lli_open_fd_write_count);
@@ -1757,7 +1759,9 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)/* Use old size assignment to avoid * deadlock bz14138 & bz14326 */ i_size_write (inode, body->size); +spin_lock (&lli->lli_lock); lli->lli_flags |=LLIF_MDS_SIZE_LOCK ; +spin_unlock (&lli->lli_lock); }ldlm_lock_decref (&lockh, mode); }
drivers/staging/lustre/lustre/llite/namei.c +4 -1
@@ -275,8 +275,11 @@ int ll_md_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,CDEBUG (D_INODE ,"invaliding layout %d.\n" , rc); } -if (bits &MDS_INODELOCK_UPDATE ) +if (bits &MDS_INODELOCK_UPDATE ) { +spin_lock (&lli->lli_lock); lli->lli_flags &= ~LLIF_MDS_SIZE_LOCK ; +spin_unlock (&lli->lli_lock); + }if (S_ISDIR (inode->i_mode) && (bits &MDS_INODELOCK_UPDATE )) {
Signature · 1 line
1.7.1
PATCH 5/8 staging/lustre/obdclass: add obd_target.h
In reply to Peng TaoFrom: Liu Xuezhao <[email protected]>
Move some server-side data structures form obd.h to obd_target.h. To remove some code dependencies use HAVE_SERVER_SUPPORT to protect some llog/fsfilt_* functions.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-1330
Lustre-change: http://review.whamcloud.com/2678
--- .../lustre/lustre/include/linux/lustre_fsfilt.h | 10 - .../staging/lustre/lustre/include/lprocfs_status.h | 36 -- drivers/staging/lustre/lustre/include/obd.h | 140 +----- drivers/staging/lustre/lustre/lvfs/lvfs_linux.c | 1 - drivers/staging/lustre/lustre/obdclass/Makefile | 2 +- .../lustre/lustre/obdclass/lprocfs_jobstats.c | 560 -------------------- drivers/staging/lustre/lustre/obdclass/obd_mount.c | 1 - 7 files changed, 3 insertions(+), 747 deletions(-) delete mode 100644 drivers/staging/lustre/lustre/obdclass/lprocfs_jobstats.c
drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h +0 -10
@@ -145,16 +145,6 @@ static inline int fsfilt_commit(struct obd_device *obd, struct inode *inode,return rc; } -static inline int fsfilt_map_inode_pages (struct obd_device *obd, -struct inode *inode, -struct page **page,int pages, -unsigned long *blocks, -int create,struct mutex *mutex) -{ -return obd->obd_fsops->fs_map_inode_pages (inode, page, pages, blocks, - create, mutex); -} -static inline int fsfilt_read_record (struct obd_device *obd,struct file *file,void *buf,loff_t size,loff_t *offs) {
drivers/staging/lustre/lustre/include/lprocfs_status.h +0 -36
@@ -370,18 +370,6 @@ static inline void s2dhms(struct dhms *ts, time_t secs)#define JOBSTATS_DISABLE "disable"#define JOBSTATS_PROCNAME_UID "procname_uid" -typedef void (*cntr_init_callback )(struct lprocfs_stats *stats); - -struct obd_job_stats { -cfs_hash_t *ojs_hash; -struct list_head ojs_list; -rwlock_t ojs_lock;/* protect the obj_list */ -cntr_init_callback ojs_cntr_init_fn; -int ojs_cntr_num; -int ojs_cleanup_interval; -time_t ojs_last_cleanup; -}; -#ifdef LPROCFS extern int lprocfs_stats_alloc_one(struct lprocfs_stats *stats,
@@ -748,16 +736,6 @@ struct file_operations name##_fops = { \ .release = lprocfs_single_release, \ }; -/* lprocfs_jobstats.c */ -int lprocfs_job_stats_log (struct obd_device *obd,char *jobid, -int event,long amount); -void lprocfs_job_stats_fini (struct obd_device *obd); -int lprocfs_job_stats_init (struct obd_device *obd,int cntr_num, -cntr_init_callback fn); -int lprocfs_rd_job_interval (struct seq_file *m,void *data); -int lprocfs_wr_job_interval (struct file *file,const char *buffer, -unsigned long count,void *data); -/* lproc_ptlrpc.c */ struct ptlrpc_request ;extern void target_print_req (void *seq_file,struct ptlrpc_request *req);
@@ -1018,20 +996,6 @@ __u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx,#define LPROC_SEQ_FOPS_RW_TYPE (name, type)#define LPROC_SEQ_FOPS_WR_ONLY (name, type) -/* lprocfs_jobstats.c */ -static inline -int lprocfs_job_stats_log (struct obd_device *obd,char *jobid,int event, -long amount) -{return 0 ; } -static inline -void lprocfs_job_stats_fini (struct obd_device *obd) -{return ; } -static inline -int lprocfs_job_stats_init (struct obd_device *obd,int cntr_num, -cntr_init_callback fn) -{return 0 ; } - -/* lproc_ptlrpc.c */ #define target_print_req NULL
drivers/staging/lustre/lustre/include/obd.h +2 -138
178 lines not on this page · raw message
drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +0 -1
@@ -48,7 +48,6 @@#include <linux/quotaops.h> #include <linux/version.h> #include <linux/libcfs/libcfs.h> -#include <lustre_fsfilt.h> #include <obd.h> #include <linux/module.h> #include <linux/init.h>
drivers/staging/lustre/lustre/obdclass/Makefile +1 -1
@@ -3,7 +3,7 @@ obj-$(CONFIG_LUSTRE_FS) += obdclass.o llog_test.o obdclass-y := linux/linux-module.o linux/linux-obdo.o linux/linux-sysctl.o \ llog.o llog_cat.o llog_obd.o llog_swab.o class_obd.o debug.o \ genops.o uuid.o llog_ioctl.o lprocfs_status.o \ - lprocfs_jobstats.o lustre_handles.o lustre_peer.o llog_osd.o \ + lustre_handles.o lustre_peer.o llog_osd.o \ local_storage.o statfs_pack.o obdo.o obd_config.o obd_mount.o\ mea.o lu_object.o dt_object.o capa.o cl_object.o \ cl_page.o cl_lock.o cl_io.o lu_ref.o acl.o idmap.o \
drivers/staging/lustre/lustre/obdclass/lprocfs_jobstats.c deleted +0 -560
560 lines not on this page · raw message
drivers/staging/lustre/lustre/obdclass/obd_mount.c +0 -1
@@ -47,7 +47,6 @@#include <obd.h> #include <lvfs.h> -#include <lustre_fsfilt.h> #include <obd_class.h> #include <lustre/lustre_user.h> #include <linux/version.h>
Signature · 1 line
1.7.1
Greg Kroah-Hartman
maintainerRe: [PATCH-RESEND 5/8] staging/lustre/obdclass: add obd_target.h
Quoted 8 lines · Peng Tao
From: Liu Xuezhao <[email protected]>
Move some server-side data structures form
obd.htoobd_target.h. To remove some code dependencies useHAVE_SERVER_SUPPORTto protect some llog/fsfilt_* functions.Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-1330
Lustre-change: http://review.whamcloud.com/2678
Quoted 7 lines
Signed-off-by Liu Xuezhao <[email protected]>Signed-off-by John L. Hammond <[email protected]>Reviewed-by Andreas Dilger <[email protected]>Reviewed-by Peng Tao <[email protected]>Reviewed-by Mike Pershin <[email protected]>Signed-off-by Peng Tao <[email protected]>Signed-off-by Andreas Dilger <[email protected]>
This patch doesn't apply cleanly due to some other patches I took earlier today, can you please refresh it and resend it?
thanks,
greg k-h
PATCH 6/8 staging/lustre: fix Kconfig bool defaults
In reply to Peng TaoShould be y instead of true.
--- drivers/staging/lustre/lustre/Kconfig | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/staging/lustre/lustre/Kconfig +1 -1
@@ -52,4 +52,4 @@ config LUSTRE_DEBUG_EXPENSIVE_CHECK config LUSTRE_TRANSLATE_ERRNOS bool depends on LUSTRE_FS && !X86 - default true + default y
Signature · 1 line
1.7.1
PATCH 7/8 staging/lustre/obdclass: use a dummy structure for lu_ref_link
In reply to Peng TaoFrom: John L. Hammond <[email protected]>
Move the definition of struct lu_ref_link to lu_ref.h. If USE_LU_REF is not defined then define it to be the empty struct. Change the return type of lu_ref_add() and lu_ref_add_atomic() to void. Add lu_ref_add_at() taking same arguments as lu_ref_add() togerther with a pointer to a struct lu_ref_link and returning void. Adjust all structures containing a lu_ref_link pointer to contain a struct lu_ref_link instead. Use lu_ref_add_at() and lu_ref_del_at() to handle embedded lu_ref_links.
[Original patch mainly changes lu_ref.[ch] but in upstream client we don't have lu_ref code in the hope of moving to kobject refcounting. So the patch only picks the other pieces of original patch, in order to keep code in sync and make it easier to port future patches.]
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3059
Lustre-change: http://review.whamcloud.com/5920
--- drivers/staging/lustre/lustre/include/cl_object.h | 10 +++++----- drivers/staging/lustre/lustre/include/lu_object.h | 18 +++++++++++++----- drivers/staging/lustre/lustre/include/lu_ref.h | 14 +++++++++++++- drivers/staging/lustre/lustre/obdclass/cl_io.c | 17 +++++++++-------- drivers/staging/lustre/lustre/obdclass/cl_lock.c | 6 +++--- drivers/staging/lustre/lustre/obdclass/cl_page.c | 5 +++-- drivers/staging/lustre/lustre/obdclass/lu_object.c | 15 ++++++++------- drivers/staging/lustre/lustre/osc/osc_cache.c | 8 +++++--- 8 files changed, 59 insertions(+), 34 deletions(-)
drivers/staging/lustre/lustre/include/cl_object.h +5 -5
@@ -768,11 +768,11 @@ struct cl_page {/** List of references to this page, for debugging. */ struct lu_ref cp_reference;/** Link to an object, for debugging. */ -struct lu_ref_link *cp_obj_ref; +struct lu_ref_link cp_obj_ref;/** Link to a queue, for debugging. */ -struct lu_ref_link *cp_queue_ref; +struct lu_ref_link cp_queue_ref;/** Per-page flags from enum cl_page_flags. Protected by a VM lock. */ -unsigned cp_flags; +unsigned cp_flags;/** Assigned if doing a sync_io */ struct cl_sync_io *cp_sync_io; };
@@ -1625,7 +1625,7 @@ struct cl_lock {/** * A reference for cl_lock::cll_descr::cld_obj. For debugging. */ -struct lu_ref_link *cll_obj_ref; +struct lu_ref_link cll_obj_ref;#ifdef CONFIG_LOCKDEP /* "dep_map" name is assumed by lockdep.h macros. */ struct lockdep_map dep_map;
@@ -2517,7 +2517,7 @@ struct cl_req_obj {/** object itself */ struct cl_object *ro_obj;/** reference to cl_req_obj::ro_obj. For debugging. */ -struct lu_ref_link *ro_obj_ref; +struct lu_ref_link ro_obj_ref;/* something else? Number of pages for a given object? */ };
drivers/staging/lustre/lustre/include/lu_object.h +13 -5
@@ -496,7 +496,7 @@ struct lu_object {/** * Link to the device, for debugging. */ -struct lu_ref_link *lo_dev_ref; +struct lu_ref_link lo_dev_ref; };enum lu_object_header_flags {
@@ -873,11 +873,19 @@ static inline __u32 lu_object_attr(const struct lu_object *o)return o->lo_header->loh_attr; } -static inline struct lu_ref_link *lu_object_ref_add (struct lu_object *o, -const char *scope, -const void *source) +static inline void lu_object_ref_add (struct lu_object *o, +const char *scope, +const void *source) { -return lu_ref_add (&o->lo_header->loh_reference, scope, source); +lu_ref_add (&o->lo_header->loh_reference, scope, source); +} + +static inline void lu_object_ref_add_at (struct lu_object *o, +struct lu_ref_link *link, +const char *scope, +const void *source) +{ +lu_ref_add_at (&o->lo_header->loh_reference, link, scope, source); } static inline void lu_object_ref_del(struct lu_object *o,
drivers/staging/lustre/lustre/include/lu_ref.h +13 -1
@@ -108,7 +108,12 @@*/ -struct lu_ref {}; +/* +* dummy data structures/functions to pass compile for now. +* We need to reimplement them with kref. +*/ +struct lu_ref {}; +struct lu_ref_link {};static inline void lu_ref_init (struct lu_ref *ref) {
@@ -132,6 +137,13 @@ static inline struct lu_ref_link *lu_ref_add_atomic(struct lu_ref *ref,return NULL ; } +static inline void lu_ref_add_at (struct lu_ref *ref, +struct lu_ref_link *link, +const char *scope, +const void *source) +{ +} +static inline void lu_ref_del (struct lu_ref *ref,const char *scope,const void *source) {
drivers/staging/lustre/lustre/obdclass/cl_io.c +9 -8
@@ -1105,7 +1105,7 @@ void cl_page_list_add(struct cl_page_list *plist, struct cl_page *page)LASSERT (list_empty (&page->cp_batch));list_add_tail (&page->cp_batch, &plist->pl_pages); ++plist->pl_nr; - page->cp_queue_ref =lu_ref_add (&page->cp_reference,"queue" , plist); +lu_ref_add_at (&page->cp_reference, &page->cp_queue_ref,"queue" , plist);cl_page_get (page);EXIT ; }
@@ -1126,7 +1126,7 @@ void cl_page_list_del(const struct lu_env *env,mutex_unlock (&page->cp_mutex);lockdep_on (); --plist->pl_nr; -lu_ref_del_at (&page->cp_reference, page->cp_queue_ref,"queue" , plist); +lu_ref_del_at (&page->cp_reference, &page->cp_queue_ref,"queue" , plist);cl_page_put (env, page);EXIT ; }
@@ -1146,8 +1146,8 @@ void cl_page_list_move(struct cl_page_list *dst, struct cl_page_list *src,list_move_tail (&page->cp_batch, &dst->pl_pages); --src->pl_nr; ++dst->pl_nr; -lu_ref_set_at (&page->cp_reference, - page->cp_queue_ref,"queue" , src, dst); +lu_ref_set_at (&page->cp_reference, &page->cp_queue_ref,"queue" , + src, dst);EXIT ; }EXPORT_SYMBOL (cl_page_list_move);
@@ -1202,7 +1202,8 @@ void cl_page_list_disown(const struct lu_env *env,* XXX cl_page_disown0() will fail if page is not locked. */ cl_page_disown0 (env, io, page); -lu_ref_del (&page->cp_reference,"queue" , plist); +lu_ref_del_at (&page->cp_reference, &page->cp_queue_ref,"queue" , + plist);cl_page_put (env, page); }EXIT ;
@@ -1449,7 +1450,7 @@ static void cl_req_free(const struct lu_env *env, struct cl_req *req)struct cl_object *obj = req->crq_o[i].ro_obj;if (obj !=NULL ) {lu_object_ref_del_at (&obj->co_lu, - req->crq_o[i].ro_obj_ref, + &req->crq_o[i].ro_obj_ref,"cl_req" , req);cl_object_put (env, obj); }
@@ -1570,8 +1571,8 @@ void cl_req_page_add(const struct lu_env *env,if (rqo->ro_obj ==NULL ) { rqo->ro_obj = obj;cl_object_get (obj); - rqo->ro_obj_ref =lu_object_ref_add (&obj->co_lu, -"cl_req" , req); +lu_object_ref_add_at (&obj->co_lu, &rqo->ro_obj_ref, +"cl_req" , req);break ; } }
drivers/staging/lustre/lustre/obdclass/cl_lock.c +3 -3
@@ -267,7 +267,7 @@ static void cl_lock_free(const struct lu_env *env, struct cl_lock *lock) }CS_LOCK_DEC (obj, total);CS_LOCKSTATE_DEC (obj, lock->cll_state); -lu_object_ref_del_at (&obj->co_lu, lock->cll_obj_ref,"cl_lock" , lock); +lu_object_ref_del_at (&obj->co_lu, &lock->cll_obj_ref,"cl_lock" , lock);cl_object_put (env, obj);lu_ref_fini (&lock->cll_reference);lu_ref_fini (&lock->cll_holders);
@@ -373,8 +373,8 @@ static struct cl_lock *cl_lock_alloc(const struct lu_env *env, lock->cll_descr = *descr; lock->cll_state =CLS_NEW ;cl_object_get (obj); - lock->cll_obj_ref =lu_object_ref_add (&obj->co_lu, -"cl_lock" , lock); +lu_object_ref_add_at (&obj->co_lu, &lock->cll_obj_ref,"cl_lock" , + lock);INIT_LIST_HEAD (&lock->cll_layers);INIT_LIST_HEAD (&lock->cll_linkage);INIT_LIST_HEAD (&lock->cll_inclosure);
drivers/staging/lustre/lustre/obdclass/cl_page.c +3 -2
@@ -270,7 +270,7 @@ static void cl_page_free(const struct lu_env *env, struct cl_page *page) }CS_PAGE_DEC (obj, total);CS_PAGESTATE_DEC (obj, page->cp_state); -lu_object_ref_del_at (&obj->co_lu, page->cp_obj_ref,"cl_page" , page); +lu_object_ref_del_at (&obj->co_lu, &page->cp_obj_ref,"cl_page" , page);cl_object_put (env, obj);lu_ref_fini (&page->cp_reference);OBD_FREE (page, pagesize);
@@ -305,7 +305,8 @@ static struct cl_page *cl_page_alloc(const struct lu_env *env,atomic_inc (&page->cp_ref); page->cp_obj = o;cl_object_get (o); - page->cp_obj_ref =lu_object_ref_add (&o->co_lu,"cl_page" ,page); +lu_object_ref_add_at (&o->co_lu, &page->cp_obj_ref,"cl_page" , + page); page->cp_index = ind;cl_page_state_set_trust (page,CPS_CACHED ); page->cp_type = type;
drivers/staging/lustre/lustre/obdclass/lu_object.c +8 -7
@@ -1147,15 +1147,16 @@ EXPORT_SYMBOL(lu_device_fini);* Initialize object \a o that is part of compound object \a h and was created * by device \a d. */ -int lu_object_init (struct lu_object *o, -struct lu_object_header *h,struct lu_device *d) +int lu_object_init (struct lu_object *o,struct lu_object_header *h, +struct lu_device *d) { -memset (o,0 ,sizeof *o); +memset (o,0 ,sizeof (*o)); o->lo_header = h; - o->lo_dev = d; + o->lo_dev = d;lu_device_get (d); - o->lo_dev_ref =lu_ref_add (&d->ld_reference,"lu_object" , o); +lu_ref_add_at (&d->ld_reference, &o->lo_dev_ref,"lu_object" , o);INIT_LIST_HEAD (&o->lo_linkage); +return 0 ; }EXPORT_SYMBOL (lu_object_init);
@@ -1170,8 +1171,8 @@ void lu_object_fini(struct lu_object *o)LASSERT (list_empty (&o->lo_linkage));if (dev !=NULL ) { -lu_ref_del_at (&dev->ld_reference, - o->lo_dev_ref ,"lu_object" , o); +lu_ref_del_at (&dev->ld_reference, &o->lo_dev_ref, +"lu_object" , o);lu_device_put (dev); o->lo_dev =NULL ; }
drivers/staging/lustre/lustre/osc/osc_cache.c +5 -3
@@ -2064,7 +2064,7 @@ static void osc_check_rpcs(const struct lu_env *env, struct client_obd *cli,while ((osc =osc_next_obj (cli)) !=NULL ) {struct cl_object *obj =osc2cl (osc); -struct lu_ref_link *link; +struct lu_ref_link link;OSC_IO_DEBUG (osc,"%lu in flight\n" ,rpcs_in_flight (cli));
@@ -2075,7 +2075,8 @@ static void osc_check_rpcs(const struct lu_env *env, struct client_obd *cli,cl_object_get (obj);client_obd_list_unlock (&cli->cl_loi_list_lock); - link =lu_object_ref_add (&obj->co_lu,"check" , current); +lu_object_ref_add_at (&obj->co_lu, &link,"check" , + current);/* attempt some read/write balancing by alternating between * reads and writes in an object. The makes_rpc checks here
@@ -2116,7 +2117,8 @@ static void osc_check_rpcs(const struct lu_env *env, struct client_obd *cli,osc_object_unlock (osc);osc_list_maint (cli, osc); -lu_object_ref_del_at (&obj->co_lu, link,"check" , current); +lu_object_ref_del_at (&obj->co_lu, &link,"check" , + current);cl_object_put (env, obj);client_obd_list_lock (&cli->cl_loi_list_lock);
Signature · 1 line
1.7.1
PATCH 8/8 staging/lustre: fix errno translate code on non-x86
In reply to Peng TaoOn non-x86 we will build with Lustre's errno translate code but it has a few issues that break build on non-x86 platforms.
--- drivers/staging/lustre/lustre/ptlrpc/Makefile | 2 +- drivers/staging/lustre/lustre/ptlrpc/errno.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-)
drivers/staging/lustre/lustre/ptlrpc/Makefile +1 -1
@@ -16,7 +16,7 @@ ptlrpc_objs += sec.o sec_bulk.o sec_gc.o sec_config.o sec_lproc.o ptlrpc_objs += sec_null.o sec_plain.o nrs.o nrs_fifo.o ptlrpc-y := $(ldlm_objs) $(ptlrpc_objs) -ptlrpc-$(CONFIG_LUSTRE_TRANSLATE_ERRNOS) += errno.c +ptlrpc-$(CONFIG_LUSTRE_TRANSLATE_ERRNOS) += errno.o obj-$(CONFIG_PTLRPC_GSS) += gss/
drivers/staging/lustre/lustre/ptlrpc/errno.c +1 -3
@@ -25,7 +25,7 @@* Copyright (c) 2013, Intel Corporation. */ -#include <libcfs/libcfs.h> +#include <linux/libcfs/libcfs.h> #include <lustre/lustre_errno.h> /*
@@ -184,7 +184,6 @@ static int lustre_errno_hton_mapping[] = { [EBADTYPE] = LUSTRE_EBADTYPE, [EJUKEBOX] = LUSTRE_EJUKEBOX, [EIOCBQUEUED] = LUSTRE_EIOCBQUEUED, - [EIOCBRETRY ] =LUSTRE_EIOCBRETRY };static int lustre_errno_ntoh_mapping[] = {
@@ -331,7 +330,6 @@ static int lustre_errno_ntoh_mapping[] = { [LUSTRE_EBADTYPE] = EBADTYPE, [LUSTRE_EJUKEBOX] = EJUKEBOX, [LUSTRE_EIOCBQUEUED] = EIOCBQUEUED, - [LUSTRE_EIOCBRETRY] = EIOCBRETRY };unsigned int lustre_errno_hton (unsigned int h)
Signature · 1 line
1.7.1
Greg Kroah-Hartman
maintainerRe: [PATCH-RESEND 8/8] staging/lustre: fix errno translate code on non-x86
Quoted 9 lines · Peng Tao
On non-x86 we will build with Lustre's errno translate code but it has a few issues that break build on non-x86 platforms.
Cc Andreas Dilger <[email protected]>Signed-off-by Peng Tao <[email protected]>--- drivers/staging/lustre/lustre/ptlrpc/Makefile | 2 +- drivers/staging/lustre/lustre/ptlrpc/errno.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-)
As this fixes a build error exposed by a patch earlier in this series, why not reorder them to prevent any build error at all?
I'll just take the first 5 in this series for now because of this.
thanks,
greg k-h
Greg Kroah-Hartman
maintainerQuoted 6 lines · Peng Tao
Hi Greg,
I've fixed up the rest of Intel tree ported patches and rebased them on top of your staging-next. Also I found that the Lustre errno translate code breaks build on non-x86 systems. I've added one patch to fix it. Please queue them if they are OK to you.
I've applied some of these, please refresh your tree, reorder the bugfix, and resend the ones I didn't apply.
Thanks for fixing up the email address stuff.
greg k-h