[PATCH] staging: dgnc: fix 'line over 80 characters'

2016-08-16 Thread Anson Jacob
fix checkpatch.pl warning about 'line over 80 characters'.

Signed-off-by: Anson Jacob 
---
 drivers/staging/dgnc/dgnc_driver.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/dgnc/dgnc_driver.h 
b/drivers/staging/dgnc/dgnc_driver.h
index 3092abe..88d2696 100644
--- a/drivers/staging/dgnc/dgnc_driver.h
+++ b/drivers/staging/dgnc/dgnc_driver.h
@@ -390,7 +390,7 @@ extern uint dgnc_major; /* Our 
driver/mgmt major */
 extern int dgnc_poll_tick; /* Poll interval - 20 ms */
 extern spinlock_t  dgnc_global_lock;   /* Driver global spinlock */
 extern spinlock_t  dgnc_poll_lock; /* Poll scheduling lock */
-extern uintdgnc_num_boards;/* Total number of 
boards */
+extern uintdgnc_num_boards;/* Total number of boards */
 extern struct dgnc_board   *dgnc_board[MAXBOARDS]; /* Array of board
 * structs
 */
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: lustre: fix checkpatch error

2016-08-16 Thread Anson Jacob
convert spaces to tab

fix the following error messages from checkpatch.pl

ERROR: code indent should use tabs where possible
WARNING: please, no spaces at the start of a line

Signed-off-by: Anson Jacob 
---
 drivers/staging/lustre/lustre/include/cl_object.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/lustre/lustre/include/cl_object.h 
b/drivers/staging/lustre/lustre/include/cl_object.h
index 3cd4a25..80c13c9 100644
--- a/drivers/staging/lustre/lustre/include/cl_object.h
+++ b/drivers/staging/lustre/lustre/include/cl_object.h
@@ -2354,7 +2354,7 @@ struct cl_client_cache {
 * Waitq for awaiting unstable pages to reach zero.
 * Used at umounting time and signaled on BRW commit
 */
-wait_queue_head_t  ccc_unstable_waitq;
+   wait_queue_head_t   ccc_unstable_waitq;
 
 };
 
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2 RESEND 2/4] Drivers: hv: balloon: account for gaps in hot add regions

2016-08-16 Thread Vitaly Kuznetsov
"Alex Ng (LIS)"  writes:

>> @@ -676,35 +686,63 @@ static void hv_mem_hot_add(unsigned long start,
>> unsigned long size,
>> 
>>  static void hv_online_page(struct page *pg)  {
>> -struct list_head *cur;
>>  struct hv_hotadd_state *has;
>> +struct hv_hotadd_gap *gap;
>>  unsigned long cur_start_pgp;
>>  unsigned long cur_end_pgp;
>> +bool is_gap = false;
>> 
>>  list_for_each(cur, _device.ha_region_list) {
>>  has = list_entry(cur, struct hv_hotadd_state, list);
>>  cur_start_pgp = (unsigned long)
>> +pfn_to_page(has->start_pfn);
>> +cur_end_pgp = (unsigned long)pfn_to_page(has->end_pfn);
>> +
>> +/* The page belongs to a different HAS. */
>> +if (((unsigned long)pg < cur_start_pgp) ||
>> +((unsigned long)pg >= cur_end_pgp))
>> +continue;
>> +
>> +cur_start_pgp = (unsigned long)
>>  pfn_to_page(has->covered_start_pfn);
>>  cur_end_pgp = (unsigned long)pfn_to_page(has-
>> >covered_end_pfn);
>> 
>> -if (((unsigned long)pg >= cur_start_pgp) &&
>> -((unsigned long)pg < cur_end_pgp)) {
>> -/*
>> - * This frame is currently backed; online the
>> - * page.
>> - */
>> -__online_page_set_limits(pg);
>> -__online_page_increment_counters(pg);
>> -__online_page_free(pg);
>> +/* The page is not backed. */
>> +if (((unsigned long)pg < cur_start_pgp) ||
>> +((unsigned long)pg >= cur_end_pgp))
>> +continue;
>> +
>> +/* Check for gaps. */
>> +list_for_each_entry(gap, >gap_list, list) {
>> +cur_start_pgp = (unsigned long)
>> +pfn_to_page(gap->start_pfn);
>> +cur_end_pgp = (unsigned long)
>> +pfn_to_page(gap->end_pfn);
>> +if (((unsigned long)pg >= cur_start_pgp) &&
>> +((unsigned long)pg < cur_end_pgp)) {
>> +is_gap = true;
>> +break;
>> +}
>>  }
>> +
>> +if (is_gap)
>> +break;
>> +
>> +/* This frame is currently backed; online the page. */
>> +__online_page_set_limits(pg);
>> +__online_page_increment_counters(pg);
>> +__online_page_free(pg);
>> +break;
>>  }
>>  }
>> 
>
> We may need to add similar logic to check for gaps in hv_bring_pgs_online().
>
> [...]

Yes, probably, I'll take a look and try to refactor the onlinig code in
a separate function to avoid duplication.

>>  static unsigned long handle_pg_range(unsigned long pg_start, @@ -834,13
>> +881,19 @@ static unsigned long process_hot_add(unsigned long pg_start,
>>  unsigned long rg_size)
>>  {
>>  struct hv_hotadd_state *ha_region = NULL;
>> +int covered;
>> 
>>  if (pfn_cnt == 0)
>>  return 0;
>> 
>> -if (!dm_device.host_specified_ha_region)
>> -if (pfn_covered(pg_start, pfn_cnt))
>> +if (!dm_device.host_specified_ha_region) {
>> +covered = pfn_covered(pg_start, pfn_cnt);
>> +if (covered < 0)
>> +return 0;
>
> If the hot-add pages aren't covered by any region, then shouldn't it fall 
> through instead of returning?
> That way the new ha_region can be added to the list and we hot-add the
> pages accordingly.

I was under an impression this is impossible:
hot_add_req()/process_hot_add() will create a new region in this
case. 'covered < 0' was added to handle one particular error: failure to
allocate memory to record gap (struct hv_hotadd_gap) and I don't have a
better idea how to handle this: if we can't remember the gap we'll crash
later on onlining...

-- 
  Vitaly
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/2] staging: lustre: Add include path to Makefile

2016-08-16 Thread Greg Kroah-Hartman
On Mon, Aug 15, 2016 at 02:14:18PM -0700, Joe Perches wrote:
> On Mon, 2016-08-15 at 23:04 +0200, Greg Kroah-Hartman wrote:
> > On Mon, Aug 15, 2016 at 12:33:23PM -0700, Joe Perches wrote:
> > > Start to rationalize include paths in source code files.
> []
> > > diff --git a/drivers/staging/lustre/Makefile 
> > > b/drivers/staging/lustre/Makefile
> []
> > > @@ -1,2 +1,5 @@
> > > +subdir-ccflags-y += -I$(srctree)/drivers/staging/lustre/include/
> > > +subdir-ccflags-y += -I$(srctree)/drivers/staging/lustre/lustre/include/
> > > +
> > >  obj-$(CONFIG_LNET)   += lnet/
> > >  obj-$(CONFIG_LUSTRE_FS)  += lustre/
> > This is good, but does this break the subdir make command:
> > make M=drivers/staging/lustre/foo_dir/
> > ?
> 
> hmm, yeah, it does.  Oh well, nevermind for awhile.
> 
> > I remember the last time I tried to clean this up, it took a while...
> 
> It seems like something the build tools should
> handle correctly now, but I'll look at it.

Nah, I think it's fine the way it is.  What's wrong with the "../" type
things in the include directives?  The build system works well with it,
you can build any single module or file correctly, and it's obvious what
the code is including from.

Now you might argue that the lustre code shouldn't have such a mess of
include files like this, and I would totally agree.  I suggest working
on reducing the number of .h files they have, and centralizing them such
that all of these cross-directory includes aren't needed anymore either
in the build directives, or in the .c files.

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 2/9] staging: most: hdm-usb: fix race between enqueue and most_stop_enqueue

2016-08-16 Thread Christian Gromm
On Mon, 15 Aug 2016 20:39:38 +0200
Greg KH  wrote:

> On Mon, Jul 18, 2016 at 05:25:28PM +0200, Christian Gromm wrote:
> > The "broken in pipe" handler of the USB-HDM calls most_stop_enqueue() to
> > stop the MBO traffic before returning all MBOs back to the Mostcore.  As
> > the enqueue() call from the Mostcore may run in parallel with the
> > most_stop_enqueue(), the HDM may run into the inconsistent state and
> > crash the kernel.
> > 
> > This patch synchronizes enqueue(), most_stop_enqueue() and
> > most_resume_enqueue() with a mutex, hence avoiding the race condition.
> > 
> > Signed-off-by: Andrey Shvetsov 
> > Signed-off-by: Christian Gromm 
> > ---
> >  drivers/staging/most/hdm-usb/hdm_usb.c |  3 +-
> >  drivers/staging/most/mostcore/core.c   | 53 
> > --
> >  2 files changed, 38 insertions(+), 18 deletions(-)
> 
> Doesn't apply to my tree anymore.  Can you fix this up and resend it and
> the rest in this series so I can apply them?

According to git you didn't apply the patchset I sent in on Friday 6/17/16, did 
you?

>>> "[PATCH 0/9] staging: most: fix hdm-usb issues" <<<

Those patches need to be applied before the latest set.

This is the cover letter of the patchset:

This patch set is needed to fix issues of the hdm-usb module.

Christian Gromm (9):
  staging: most: hdm-usb: remove unused macro HW_RESYNC
  staging: most: hdm-usb: provide MBO status when freeing buffers
  staging: most: hdm-usb: fix clear halt processing
  staging: most: hdm-usb: stop core from submitting buffers in case of
broken pipe
  staging: most: hdm-usb: add USB product id
  staging: most: hdm-usb: rename ID_INIC for consistency
  staging: most: hdm-usb: make use of is_channel_healthy flag
  staging: most: hdm-usb: remove redundant conditions
  staging: most: hdm-usb: simplify initialization of mbo->status.

 drivers/staging/most/hdm-usb/hdm_usb.c | 109 -
 1 file changed, 52 insertions(+), 57 deletions(-)

-- 
1.9.1


Should I resend those or do still have them?

regards,
Chris

> 
> thanks,
> 
> greg k-h

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/2] staging: lustre: Add include path to Makefile

2016-08-16 Thread Joe Perches
On Tue, 2016-08-16 at 12:53 +0200, Greg Kroah-Hartman wrote:
> On Mon, Aug 15, 2016 at 02:14:18PM -0700, Joe Perches wrote:
> > On Mon, 2016-08-15 at 23:04 +0200, Greg Kroah-Hartman wrote:
> > > On Mon, Aug 15, 2016 at 12:33:23PM -0700, Joe Perches wrote:
> > > > Start to rationalize include paths in source code files.
[]
> Nah, I think it's fine the way it is.  What's wrong with the "../" type
> things in the include directives?

.. path specific includes are unnecessarily file layout sensitive.

There are identically named .h files in separate directories.

The idea was to isolate the uapi type .h files from local ones.

I'll just give this up and let the lustre folks handle it.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 29/80] staging: lustre: lmv: lookup remote migrating object in LMV

2016-08-16 Thread James Simmons
From: wang di 

If remote object is being found in a migrating directory,
it should continue to lookup the object in remote MDT,
instead of return.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4805
Reviewed-on: http://review.whamcloud.com/9806
Reviewed-by: John L. Hammond 
Reviewed-by: Nathaniel Clark 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c 
b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
index 51b7048..a38d343 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
@@ -471,7 +471,6 @@ static int lmv_intent_lookup(struct obd_export *exp,
it->it_disposition &= ~DISP_ENQ_COMPLETE;
rc = md_intent_lock(tgt->ltd_exp, op_data, lmm, lmmsize, it,
flags, reqp, cb_blocking, extra_lock_flags);
-   return rc;
}
 
/*
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 17/80] staging: lustre: add ability to migrate inodes.

2016-08-16 Thread James Simmons
From: wang di 

Add client support to migrate the individual inodes
from one MDT to another MDT, and this functionality
will only migrate inode layout on MDT but not touch
data object on OST.

The directory will be migrated from top to the bottom,
i.e. migrating parent first, then migrating the child.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2430
Reviewed-on: http://review.whamcloud.com/6662
Reviewed-by: Alex Zhuravlev 
Reviewed-by: John L. Hammond 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   11 +-
 .../lustre/lustre/include/lustre/lustre_user.h |1 +
 drivers/staging/lustre/lustre/include/lustre_lmv.h |2 +
 drivers/staging/lustre/lustre/include/obd.h|   12 +--
 drivers/staging/lustre/lustre/llite/dir.c  |   43 +-
 drivers/staging/lustre/lustre/llite/file.c |  113 -
 .../staging/lustre/lustre/llite/llite_internal.h   |   14 ++-
 drivers/staging/lustre/lustre/llite/llite_lib.c|   33 -
 drivers/staging/lustre/lustre/llite/namei.c|3 +-
 drivers/staging/lustre/lustre/llite/rw.c   |4 +
 drivers/staging/lustre/lustre/llite/statahead.c|1 +
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |   32 +++-
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|  176 ++--
 drivers/staging/lustre/lustre/mdc/mdc_lib.c|2 +
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|4 +-
 15 files changed, 368 insertions(+), 83 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 0ff30c6..6853f62 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1482,6 +1482,7 @@ enum obdo_flags {
 #define LOV_MAGIC   LOV_MAGIC_V1
 #define LOV_MAGIC_JOIN_V1 0x0BD20BD0
 #define LOV_MAGIC_V3  0x0BD30BD0
+#define LOV_MAGIC_MIGRATE 0x0BD40BD0
 
 /*
  * magic for fully defined striping
@@ -1987,7 +1988,7 @@ enum mdt_reint_cmd {
REINT_OPEN = 6,
REINT_SETXATTR = 7,
REINT_RMENTRY  = 8,
-/*  REINT_WRITE= 9, */
+   REINT_MIGRATE  = 9,
REINT_MAX
 };
 
@@ -2280,6 +2281,7 @@ enum mds_op_bias {
MDS_CREATE_VOLATILE = 1 << 10,
MDS_OWNEROVERRIDE   = 1 << 11,
MDS_HSM_RELEASE = 1 << 12,
+   MDS_RENAME_MIGRATE  = BIT(13),
 };
 
 /* instance of mdt_reint_rec */
@@ -2488,11 +2490,13 @@ struct lmv_desc {
 /* lmv structures */
 #define LMV_MAGIC_V1   0x0CD10CD0  /* normal stripe lmv magic */
 #define LMV_USER_MAGIC 0x0CD20CD0  /* default lmv magic*/
+#define LMV_MAGIC_MIGRATE  0x0CD30CD0  /* migrate stripe lmv magic */
 #define LMV_MAGIC  LMV_MAGIC_V1
 
 enum lmv_hash_type {
LMV_HASH_TYPE_ALL_CHARS = 1,
LMV_HASH_TYPE_FNV_1A_64 = 2,
+   LMV_HASH_TYPE_MIGRATION = 3,
 };
 
 #define LMV_HASH_NAME_ALL_CHARS"all_char"
@@ -2552,7 +2556,8 @@ static inline ssize_t lmv_mds_md_size(int stripe_count, 
unsigned int lmm_magic)
ssize_t len = -EINVAL;
 
switch (lmm_magic) {
-   case LMV_MAGIC_V1: {
+   case LMV_MAGIC_V1:
+   case LMV_MAGIC_MIGRATE: {
struct lmv_mds_md_v1 *lmm1;
 
len = sizeof(*lmm1);
@@ -2568,6 +2573,7 @@ static inline int lmv_mds_md_stripe_count_get(const union 
lmv_mds_md *lmm)
 {
switch (le32_to_cpu(lmm->lmv_magic)) {
case LMV_MAGIC_V1:
+   case LMV_MAGIC_MIGRATE:
return le32_to_cpu(lmm->lmv_md_v1.lmv_stripe_count);
case LMV_USER_MAGIC:
return le32_to_cpu(lmm->lmv_user_md.lum_stripe_count);
@@ -2583,6 +2589,7 @@ static inline int lmv_mds_md_stripe_count_set(union 
lmv_mds_md *lmm,
 
switch (le32_to_cpu(lmm->lmv_magic)) {
case LMV_MAGIC_V1:
+   case LMV_MAGIC_MIGRATE:
lmm->lmv_md_v1.lmv_stripe_count = cpu_to_le32(stripe_count);
break;
case LMV_USER_MAGIC:
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index 26dbda0..4746320 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
@@ -243,6 +243,7 @@ struct ost_id {
 #define LL_IOC_GET_LEASE   _IO('f', 244)
 #define LL_IOC_HSM_IMPORT  _IOWR('f', 245, struct hsm_user_import)
 #define LL_IOC_LMV_SET_DEFAULT_STRIPE  _IOWR('f', 246, struct lmv_user_md)
+#define LL_IOC_MIGRATE _IOR('f', 247, int)
 
 #define LL_STATFS_LMV 1
 #define LL_STATFS_LOV 2
diff --git a/drivers/staging/lustre/lustre/include/lustre_lmv.h 

[PATCH 19/80] staging: lustre: libcfs: Only dump log once per sec. to avoid EEXIST

2016-08-16 Thread James Simmons
From: Ryan Haasken 

Since the log file name contains the current time in seconds, dumping
the logs more than once per second causes EEXIST errors to be emitted.
Add a static variable to libcfs_debug_dumplog_internal that records
the time of the last Lustre log dump.  If the current time in seconds
is equal to the last time, do not dump logs again.

Note that this is not thread-safe.  However, in the rare case that two
threads try to access last_dump_time simultaneously, the worst thing
that could happen is that one of the threads will get an EEXIST error
when trying to write the log file.  This is no worse than the current
situation, and it is not likely to happen.

Signed-off-by: Ryan Haasken 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4129
Reviewed-on: http://review.whamcloud.com/8964
Reviewed-by: Andreas Dilger 
Reviewed-by: Bob Glossman 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lnet/libcfs/debug.c |9 +++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/debug.c 
b/drivers/staging/lustre/lnet/libcfs/debug.c
index 42b15a7..23b36b8 100644
--- a/drivers/staging/lustre/lnet/libcfs/debug.c
+++ b/drivers/staging/lustre/lnet/libcfs/debug.c
@@ -328,15 +328,20 @@ libcfs_debug_str2mask(int *mask, const char *str, int 
is_subsys)
  */
 void libcfs_debug_dumplog_internal(void *arg)
 {
+   static time64_t last_dump_time;
+   time64_t current_time;
void *journal_info;
 
journal_info = current->journal_info;
current->journal_info = NULL;
+   current_time = ktime_get_real_seconds();
 
-   if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) != 0) {
+   if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) &&
+   current_time > last_dump_time) {
+   last_dump_time = current_time;
snprintf(debug_file_name, sizeof(debug_file_name) - 1,
 "%s.%lld.%ld", libcfs_debug_file_path_arr,
-(s64)ktime_get_real_seconds(), (long_ptr_t)arg);
+(s64)current_time, (long_ptr_t)arg);
pr_alert("LustreError: dumping log to %s\n", debug_file_name);
cfs_tracefile_dump_all_pages(debug_file_name);
libcfs_run_debug_log_upcall(debug_file_name);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 51/80] staging: lustre: lmv: Match MDT where the FID locates first

2016-08-16 Thread James Simmons
From: wang di 

With DNE every object can have two locks in different namespaces:
lookup lock in space of MDT storing direntry and update/open lock
in space of MDT storing inode. In lmv_find_cbdata/lmv_lock_lock,
it should try the MDT that the FID maps to first, since this can
be easily found, and only try others if that fails.

In the error handler of lmv_add_targets, it should check whether
ld_tgt_count is being increased before ld_tgt_count is being -1.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4098
Reviewed-on: http://review.whamcloud.com/8019
Reviewed-by: Andreas Dilger 
Reviewed-by: Fan Yong 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_internal.h |   45 +-
 drivers/staging/lustre/lustre/lmv/lmv_obd.c  |   57 +++---
 2 files changed, 73 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h 
b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
index dbd1da6..faf6a7b 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h
+++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
@@ -64,35 +64,56 @@ int lmv_revalidate_slaves(struct obd_export *exp, struct 
mdt_body *mbody,
  int extra_lock_flags);
 
 static inline struct lmv_tgt_desc *
-lmv_get_target(struct lmv_obd *lmv, u32 mds)
+lmv_get_target(struct lmv_obd *lmv, u32 mdt_idx, int *index)
 {
-   int count = lmv->desc.ld_tgt_count;
int i;
 
-   for (i = 0; i < count; i++) {
+   for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
if (!lmv->tgts[i])
continue;
 
-   if (lmv->tgts[i]->ltd_idx == mds)
+   if (lmv->tgts[i]->ltd_idx == mdt_idx) {
+   if (index)
+   *index = i;
return lmv->tgts[i];
+   }
}
 
return ERR_PTR(-ENODEV);
 }
 
-static inline struct lmv_tgt_desc *
-lmv_find_target(struct lmv_obd *lmv, const struct lu_fid *fid)
+static inline int
+lmv_find_target_index(struct lmv_obd *lmv, const struct lu_fid *fid)
 {
-   u32 mds = 0;
-   int rc;
+   struct lmv_tgt_desc *ltd;
+   u32 mdt_idx = 0;
+   int index = 0;
 
if (lmv->desc.ld_tgt_count > 1) {
-   rc = lmv_fld_lookup(lmv, fid, );
-   if (rc)
-   return ERR_PTR(rc);
+   int rc;
+
+   rc = lmv_fld_lookup(lmv, fid, _idx);
+   if (rc < 0)
+   return rc;
}
 
-   return lmv_get_target(lmv, mds);
+   ltd = lmv_get_target(lmv, mdt_idx, );
+   if (IS_ERR(ltd))
+   return PTR_ERR(ltd);
+
+   return index;
+}
+
+static inline struct lmv_tgt_desc *
+lmv_find_target(struct lmv_obd *lmv, const struct lu_fid *fid)
+{
+   int index;
+
+   index = lmv_find_target_index(lmv, fid);
+   if (index < 0)
+   return ERR_PTR(index);
+
+   return lmv->tgts[index];
 }
 
 static inline int lmv_stripe_md_size(int stripe_count)
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 9821f69..6917a03 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -480,6 +480,7 @@ static int lmv_add_target(struct obd_device *obd, struct 
obd_uuid *uuidp,
 {
struct lmv_obd  *lmv = >u.lmv;
struct lmv_tgt_desc *tgt;
+   int orig_tgt_count = 0;
int   rc = 0;
 
CDEBUG(D_CONFIG, "Target uuid: %s. index %d\n", uuidp->uuid, index);
@@ -549,14 +550,17 @@ static int lmv_add_target(struct obd_device *obd, struct 
obd_uuid *uuidp,
tgt->ltd_uuid = *uuidp;
tgt->ltd_active = 0;
lmv->tgts[index] = tgt;
-   if (index >= lmv->desc.ld_tgt_count)
+   if (index >= lmv->desc.ld_tgt_count) {
+   orig_tgt_count = lmv->desc.ld_tgt_count;
lmv->desc.ld_tgt_count = index + 1;
+   }
 
if (lmv->connected) {
rc = lmv_connect_mdc(obd, tgt);
if (rc) {
spin_lock(>lmv_lock);
-   lmv->desc.ld_tgt_count--;
+   if (lmv->desc.ld_tgt_count == index + 1)
+   lmv->desc.ld_tgt_count = orig_tgt_count;
memset(tgt, 0, sizeof(*tgt));
spin_unlock(>lmv_lock);
} else {
@@ -1263,7 +1267,7 @@ int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid 
*fid, u32 mds)
struct lmv_tgt_desc *tgt;
int  rc;
 
-   tgt = lmv_get_target(lmv, mds);
+   tgt = lmv_get_target(lmv, mds, NULL);
if (IS_ERR(tgt))
return PTR_ERR(tgt);
 
@@ -1610,6 +1614,7 @@ static int lmv_find_cbdata(struct 

[PATCH 38/80] staging: lustre: move ioctls to lustre_ioctl.h

2016-08-16 Thread James Simmons
From: John L. Hammond 

Move ioctl definitions and related functions from lustre_dlm.h,
lustre_lib.h, obd.h, to lustre_ioctl.h. Replace the definitions of
retired ioctls with comment.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4961
Reviewed-on: http://review.whamcloud.com/10139
Reviewed-by: Andreas Dilger 
Reviewed-by: Robert Read 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_ioctl.h|  412 
 .../lustre/lustre/include/lustre/lustre_user.h |   21 +-
 drivers/staging/lustre/lustre/include/lustre_dlm.h |   10 -
 drivers/staging/lustre/lustre/include/lustre_lib.h |  284 --
 drivers/staging/lustre/lustre/include/obd.h|   10 -
 drivers/staging/lustre/lustre/llite/dir.c  |9 +-
 drivers/staging/lustre/lustre/llite/file.c |1 +
 drivers/staging/lustre/lustre/llite/llite_lib.c|1 +
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|1 +
 drivers/staging/lustre/lustre/lov/lov_obd.c|1 +
 drivers/staging/lustre/lustre/mdc/mdc_request.c|1 +
 drivers/staging/lustre/lustre/obdclass/class_obd.c |8 +-
 .../lustre/lustre/obdclass/linux/linux-module.c|1 +
 .../staging/lustre/lustre/obdclass/obd_config.c|1 +
 .../staging/lustre/lustre/obdecho/echo_client.c|1 +
 drivers/staging/lustre/lustre/osc/osc_request.c|1 +
 16 files changed, 430 insertions(+), 333 deletions(-)
 create mode 100644 drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h
new file mode 100644
index 000..f3d7c94
--- /dev/null
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h
@@ -0,0 +1,412 @@
+/*
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * Copyright (c) 2011, 2015, Intel Corporation.
+ */
+#ifndef LUSTRE_IOCTL_H_
+#define LUSTRE_IOCTL_H_
+
+#include 
+#include "../../../include/linux/libcfs/libcfs.h"
+#include "lustre_idl.h"
+
+#ifdef __KERNEL__
+# include 
+# include 
+# include "../obd_support.h"
+#else /* __KERNEL__ */
+# include 
+# include 
+#include 
+#endif /* !__KERNEL__ */
+
+#if !defined(__KERNEL__) && !defined(LUSTRE_UTILS)
+# error This file is for Lustre internal use only.
+#endif
+
+enum md_echo_cmd {
+   ECHO_MD_CREATE  = 1, /* Open/Create file on MDT */
+   ECHO_MD_MKDIR   = 2, /* Mkdir on MDT */
+   ECHO_MD_DESTROY = 3, /* Unlink file on MDT */
+   ECHO_MD_RMDIR   = 4, /* Rmdir on MDT */
+   ECHO_MD_LOOKUP  = 5, /* Lookup on MDT */
+   ECHO_MD_GETATTR = 6, /* Getattr on MDT */
+   ECHO_MD_SETATTR = 7, /* Setattr on MDT */
+   ECHO_MD_ALLOC_FID   = 8, /* Get FIDs from MDT */
+};
+
+#define OBD_DEV_ID 1
+#define OBD_DEV_NAME "obd"
+#define OBD_DEV_PATH "/dev/" OBD_DEV_NAME
+#define OBD_DEV_MAJOR 10
+#define OBD_DEV_MINOR 241
+
+#define OBD_IOCTL_VERSION  0x00010004
+#define OBD_DEV_BY_DEVNAME 0xd0de
+#define OBD_MAX_IOCTL_BUFFER   CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER
+
+struct obd_ioctl_data {
+   __u32   ioc_len;
+   __u32   ioc_version;
+
+   union {
+   __u64   ioc_cookie;
+   __u64   ioc_u64_1;
+   };
+   union {
+   __u32   ioc_conn1;
+   __u32   ioc_u32_1;
+   };
+   union {
+   __u32   ioc_conn2;
+   __u32   ioc_u32_2;
+   };
+
+   struct obdo ioc_obdo1;
+   struct obdo ioc_obdo2;
+
+   __u64   ioc_count;
+   __u64   ioc_offset;
+   __u32   ioc_dev;
+   __u32   ioc_command;
+
+   __u64   ioc_nid;
+   __u32   ioc_nal;
+   __u32   ioc_type;
+
+   /* buffers the kernel will treat as user pointers */
+   __u32   ioc_plen1;
+   

[PATCH 44/80] staging: lustre: Remove static declaration in anonymous union

2016-08-16 Thread James Simmons
From: Christopher J. Morrone 

It is not permitted in C++ to have a static declaration inside
of an anonymous union. The g++ compiler will complaine with an
error like this:

 error: struct ost_idostid invalid; an
 anonymous union can only have non-static data members [-fpermissive]

This patch changes the code to use an unnamed struct in place of
"struct ostid" inside of the anonymous union. That name declaration
was completely unnecessary anyway, since it was not used anywhere else.

Signed-off-by: Christopher J. Morrone 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4987
Reviewed-on: http://review.whamcloud.com/10176
Reviewed-by: Robert Read 
Reviewed-by: Andreas Dilger 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_user.h |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index 4b2553c..59d45de 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
@@ -167,7 +167,7 @@ struct lustre_mdt_attrs {
  */
 struct ost_id {
union {
-   struct ostid {
+   struct {
__u64   oi_id;
__u64   oi_seq;
} oi;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 01/80] staging: lustre: llite: add md_op_data parameter to ll_get_dir_page

2016-08-16 Thread James Simmons
From: wang di 

Pass in struct md_op_data for ll_get_dir_page function.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c  |8 
 .../staging/lustre/lustre/llite/llite_internal.h   |4 ++--
 drivers/staging/lustre/lustre/llite/statahead.c|   15 +++
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 031c9e4..82c7f88 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -322,8 +322,8 @@ static struct page *ll_dir_page_locate(struct inode *dir, 
__u64 *hash,
return page;
 }
 
-struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
-struct ll_dir_chain *chain)
+struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
+__u64 hash, struct ll_dir_chain *chain)
 {
ldlm_policy_data_t policy = {.l_inodebits = {MDS_INODELOCK_UPDATE} };
struct address_space *mapping = dir->i_mapping;
@@ -503,7 +503,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 
ll_dir_chain_init();
 
-   page = ll_get_dir_page(inode, pos, );
+   page = ll_get_dir_page(inode, op_data, pos, );
 
while (rc == 0 && !done) {
struct lu_dirpage *dp;
@@ -585,7 +585,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
le32_to_cpu(dp->ldp_flags) &
LDF_COLLIDE);
next = pos;
-   page = ll_get_dir_page(inode, pos,
+   page = ll_get_dir_page(inode, op_data, pos,
   );
}
}
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index dc15957..fc0c72c 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -651,8 +651,8 @@ void ll_rw_stats_tally(struct ll_sb_info *sbi, pid_t pid,
 void ll_release_page(struct page *page, int remove);
 extern const struct file_operations ll_dir_operations;
 extern const struct inode_operations ll_dir_inode_operations;
-struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
-struct ll_dir_chain *chain);
+struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
+__u64 hash, struct ll_dir_chain *chain);
 int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
struct dir_context *ctx);
 
diff --git a/drivers/staging/lustre/lustre/llite/statahead.c 
b/drivers/staging/lustre/lustre/llite/statahead.c
index 54ed52e..1b222c7 100644
--- a/drivers/staging/lustre/lustre/llite/statahead.c
+++ b/drivers/staging/lustre/lustre/llite/statahead.c
@@ -1067,7 +1067,7 @@ static int ll_statahead_thread(void *arg)
wake_up(>t_ctl_waitq);
 
ll_dir_chain_init();
-   page = ll_get_dir_page(dir, pos, );
+   page = ll_get_dir_page(dir, op_data, pos, );
 
while (1) {
struct lu_dirpage *dp;
@@ -1232,7 +1232,7 @@ do_it:
ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
  LDF_COLLIDE);
sai->sai_in_readpage = 1;
-   page = ll_get_dir_page(dir, pos, );
+   page = ll_get_dir_page(dir, op_data, pos, );
sai->sai_in_readpage = 0;
}
}
@@ -1344,13 +1344,19 @@ static int is_first_dirent(struct inode *dir, struct 
dentry *dentry)
 {
struct ll_dir_chain   chain;
const struct qstr  *target = >d_name;
+   struct md_op_data *op_data;
struct page   *page;
__u64pos= 0;
intdot_de;
intrc = LS_NONE_FIRST_DE;
 
+   op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
+LUSTRE_OPC_ANY, dir);
+   if (IS_ERR(op_data))
+   return PTR_ERR(op_data);
+
ll_dir_chain_init();
-   page = ll_get_dir_page(dir, pos, );
+   page = ll_get_dir_page(dir, op_data, pos, );
 
while (1) {
struct lu_dirpage *dp;
@@ -1438,12 +1444,13 @@ static int is_first_dirent(struct inode *dir, struct 
dentry 

[PATCH 16/80] staging: lustre: obdclass: bug fixes for lu_device_type handling

2016-08-16 Thread James Simmons
From: Fan Yong 

There was no protection when inc/dec lu_device_type::ldt_device_nr,
which may caused the ldt_device_nr to be wrong and trigger assert.
This patch redefine lu_device_type::ldt_device_nr as atomic type.

There was no protection when add/del lu_device_type::ldt_linkage
into/from the global lu_device_types list, which may caused bad
address accessing. This patch uses the existing obd_types_lock
to protect related operations.

We do NOT need lu_types_stop() any longer. Such function scans
the global lu_device_types list, and for each type item on it
which has zerod lu_device_type::ldt_device_nr, call its stop()
method. In fact, the lu_device_type::ldt_device_nr only will be
zero when the last lu_device_fini() is called, and at that time,
inside the lu_device_fini(), its stop() method will be called.
So it is unnecessary to call the stop() again via lu_types_stop().

Signed-off-by: Fan Yong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4604
Reviewed-on: http://review.whamcloud.com/8694
Reviewed-by: Jian Yu 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/lu_object.h  |3 +-
 drivers/staging/lustre/lustre/llite/vvp_dev.c  |6 ---
 drivers/staging/lustre/lustre/obdclass/lu_object.c |   34 ++--
 drivers/staging/lustre/lustre/obdclass/obd_mount.c |1 -
 4 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lu_object.h 
b/drivers/staging/lustre/lustre/include/lu_object.h
index 6e25c1b..25c12d8 100644
--- a/drivers/staging/lustre/lustre/include/lu_object.h
+++ b/drivers/staging/lustre/lustre/include/lu_object.h
@@ -327,7 +327,7 @@ struct lu_device_type {
/**
 * Number of existing device type instances.
 */
-   unsignedldt_device_nr;
+   atomic_tldt_device_nr;
/**
 * Linkage into a global list of all device types.
 *
@@ -673,7 +673,6 @@ void lu_object_add(struct lu_object *before, struct 
lu_object *o);
 
 int  lu_device_type_init(struct lu_device_type *ldt);
 void lu_device_type_fini(struct lu_device_type *ldt);
-void lu_types_stop(void);
 
 /** @} ctors */
 
diff --git a/drivers/staging/lustre/lustre/llite/vvp_dev.c 
b/drivers/staging/lustre/lustre/llite/vvp_dev.c
index e623216..771c0bd 100644
--- a/drivers/staging/lustre/lustre/llite/vvp_dev.c
+++ b/drivers/staging/lustre/lustre/llite/vvp_dev.c
@@ -368,12 +368,6 @@ int cl_sb_fini(struct super_block *sb)
CERROR("Cannot cleanup cl-stack due to memory shortage.\n");
result = PTR_ERR(env);
}
-   /*
-* If mount failed (sbi->ll_cl == NULL), and this there are no other
-* mounts, stop device types manually (this usually happens
-* automatically when last device is destroyed).
-*/
-   lu_types_stop();
return result;
 }
 
diff --git a/drivers/staging/lustre/lustre/obdclass/lu_object.c 
b/drivers/staging/lustre/lustre/obdclass/lu_object.c
index 9b03059..0c00bf8 100644
--- a/drivers/staging/lustre/lustre/obdclass/lu_object.c
+++ b/drivers/staging/lustre/lustre/obdclass/lu_object.c
@@ -726,34 +726,31 @@ int lu_device_type_init(struct lu_device_type *ldt)
 {
int result = 0;
 
+   atomic_set(>ldt_device_nr, 0);
INIT_LIST_HEAD(>ldt_linkage);
if (ldt->ldt_ops->ldto_init)
result = ldt->ldt_ops->ldto_init(ldt);
-   if (result == 0)
+
+   if (!result) {
+   spin_lock(_types_lock);
list_add(>ldt_linkage, _device_types);
+   spin_unlock(_types_lock);
+   }
+
return result;
 }
 EXPORT_SYMBOL(lu_device_type_init);
 
 void lu_device_type_fini(struct lu_device_type *ldt)
 {
+   spin_lock(_types_lock);
list_del_init(>ldt_linkage);
+   spin_unlock(_types_lock);
if (ldt->ldt_ops->ldto_fini)
ldt->ldt_ops->ldto_fini(ldt);
 }
 EXPORT_SYMBOL(lu_device_type_fini);
 
-void lu_types_stop(void)
-{
-   struct lu_device_type *ldt;
-
-   list_for_each_entry(ldt, _device_types, ldt_linkage) {
-   if (ldt->ldt_device_nr == 0 && ldt->ldt_ops->ldto_stop)
-   ldt->ldt_ops->ldto_stop(ldt);
-   }
-}
-EXPORT_SYMBOL(lu_types_stop);
-
 /**
  * Global list of all sites on this node
  */
@@ -1082,8 +1079,10 @@ EXPORT_SYMBOL(lu_device_put);
  */
 int lu_device_init(struct lu_device *d, struct lu_device_type *t)
 {
-   if (t->ldt_device_nr++ == 0 && t->ldt_ops->ldto_start)
+   if (atomic_inc_return(>ldt_device_nr) == 1 &&
+   t->ldt_ops->ldto_start)
t->ldt_ops->ldto_start(t);
+
memset(d, 0, sizeof(*d));
atomic_set(>ld_ref, 0);
d->ld_type = t;
@@ -1098,9 +1097,8 @@ 

[PATCH 03/80] staging: lustre: llite: style cleanup for llite_internal.h

2016-08-16 Thread James Simmons
From: wang di 

Group function prototypes together related to dir.c. Move
ll_release_page to be with function declarations.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lustre/llite/llite_internal.h   |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index fc0c72c..1ced397 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -648,15 +648,15 @@ void ll_rw_stats_tally(struct ll_sb_info *sbi, pid_t pid,
   size_t count, int rw);
 
 /* llite/dir.c */
-void ll_release_page(struct page *page, int remove);
 extern const struct file_operations ll_dir_operations;
 extern const struct inode_operations ll_dir_inode_operations;
-struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
-__u64 hash, struct ll_dir_chain *chain);
 int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
struct dir_context *ctx);
-
 int ll_get_mdt_idx(struct inode *inode);
+struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
+__u64 hash, struct ll_dir_chain *chain);
+void ll_release_page(struct page *page, int remove);
+
 /* llite/namei.c */
 extern const struct inode_operations ll_special_inode_operations;
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 14/80] staging: lustre: delete striped directory

2016-08-16 Thread James Simmons
From: wang di 

Add delete striped directory, it includes

1. enable sync log between MDTs, so slave objects will
   be delete by unlink log, which is similar as deleting ost
   object.

2. retrieve layout information of striped directory on MDT,
   then lock all of the slave objects before unlink.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-on: http://review.whamcloud.com/7445
Reviewed-by: Alex Zhuravlev 
Reviewed-by: John L. Hammond 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/lustre_dlm.h |1 +
 drivers/staging/lustre/lustre/include/lustre_fid.h |1 +
 drivers/staging/lustre/lustre/llite/dir.c  |   10 ---
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |5 ++
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|   75 +++-
 5 files changed, 65 insertions(+), 27 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h 
b/drivers/staging/lustre/lustre/include/lustre_dlm.h
index 60051a5..f7805cc 100644
--- a/drivers/staging/lustre/lustre/include/lustre_dlm.h
+++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h
@@ -968,6 +968,7 @@ struct ldlm_enqueue_info {
void *ei_cb_cp;  /** lock completion callback */
void *ei_cb_gl;  /** lock glimpse callback */
void *ei_cbdata; /** Data to be passed into callbacks. */
+   unsigned int ei_enq_slave:1; /* whether enqueue slave stripes */
 };
 
 extern struct obd_ops ldlm_obd_ops;
diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h 
b/drivers/staging/lustre/lustre/include/lustre_fid.h
index 743671a..61f3930 100644
--- a/drivers/staging/lustre/lustre/include/lustre_fid.h
+++ b/drivers/staging/lustre/lustre/include/lustre_fid.h
@@ -229,6 +229,7 @@ enum local_oid {
MDD_LOV_OBJ_OSEQ= 4121UL,
LFSCK_NAMESPACE_OID = 4122UL,
REMOTE_PARENT_DIR_OID   = 4123UL,
+   SLAVE_LLOG_CATALOGS_OID = 4124UL,
 };
 
 static inline void lu_local_obj_fid(struct lu_fid *fid, __u32 oid)
diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 5288750..96ae7d5 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -679,16 +679,6 @@ static int ll_dir_setdirstripe(struct inode *dir, struct 
lmv_user_md *lump,
if (unlikely(lump->lum_magic != LMV_USER_MAGIC))
return -EINVAL;
 
-   if (lump->lum_stripe_offset == (__u32)-1) {
-   int mdtidx;
-
-   mdtidx = ll_get_mdt_idx(dir);
-   if (mdtidx < 0)
-   return mdtidx;
-
-   lump->lum_stripe_offset = mdtidx;
-   }
-
CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) name %s stripe_offset %d, 
stripe_count: %u\n",
   PFID(ll_inode2fid(dir)), dir, filename,
   (int)lump->lum_stripe_offset, lump->lum_stripe_count);
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c 
b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
index 1b9bbb2..5313dfc 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
@@ -244,6 +244,11 @@ update:
if (req)
ptlrpc_req_finished(req);
 
+   if (it.it_lock_mode && lockh) {
+   ldlm_lock_decref(lockh, 
it.it_lock_mode);
+   it.it_lock_mode = 0;
+   }
+
rc = -EIO;
goto cleanup;
}
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index da4855d..81dcc0a 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -101,6 +101,9 @@ int lmv_name_to_stripe_index(enum lmv_hash_type hashtype,
return -EINVAL;
}
 
+   CDEBUG(D_INFO, "name %.*s hash_type %d idx %d\n", namelen, name,
+  hashtype, idx);
+
LASSERT(idx < max_mdt_index);
return idx;
 }
@@ -1230,7 +1233,16 @@ static int lmv_placement_policy(struct obd_device *obd,
struct lmv_user_md *lum;
 
lum = op_data->op_data;
-   *mds = lum->lum_stripe_offset;
+   if (lum->lum_stripe_offset != (__u32)-1) {
+   *mds = lum->lum_stripe_offset;
+   } else {
+   /*
+* -1 means default, which will be in the same MDT with
+* the stripe
+*/
+   *mds = op_data->op_mds;
+   lum->lum_stripe_offset = 

[PATCH 28/80] staging: lustre: lmv: access lum_stripe_offset as little endian

2016-08-16 Thread James Simmons
From: John L. Hammond 

By the time that a struct lmv_user_md reaches lmv_placement_policy()
it has already been converted to little endian. Therefore use the
appropriate macros around accesses to this this field. This issue was
found by rewriting the definition of struct lmv_user_md to use the
__leXX typedefs and running sparse.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4738
Reviewed-on: http://review.whamcloud.com/9671
Reviewed-by: Dmitry Eremin 
Reviewed-by: Swapnil Pimpale 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index c005a66..5929994 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -1242,15 +1242,15 @@ static int lmv_placement_policy(struct obd_device *obd,
struct lmv_user_md *lum;
 
lum = op_data->op_data;
-   if (lum->lum_stripe_offset != (__u32)-1) {
-   *mds = lum->lum_stripe_offset;
+   if (le32_to_cpu(lum->lum_stripe_offset) != (__u32)-1) {
+   *mds = le32_to_cpu(lum->lum_stripe_offset);
} else {
/*
 * -1 means default, which will be in the same MDT with
 * the stripe
 */
*mds = op_data->op_mds;
-   lum->lum_stripe_offset = op_data->op_mds;
+   lum->lum_stripe_offset = cpu_to_le32(op_data->op_mds);
}
} else {
/*
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/80] staging: lustre: lmv: replace obd_free_memmd with lmv_free_memmd

2016-08-16 Thread James Simmons
From: wang di 

Use lmv_free_memmd for proper cleanup instead of
the generic obd_free_memmd.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 0b1260d..6be2afc 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -2692,7 +2692,7 @@ static int lmv_free_lustre_md(struct obd_export *exp, 
struct lustre_md *md)
struct lmv_tgt_desc *tgt = lmv->tgts[0];
 
if (md->lmv)
-   obd_free_memmd(exp, (void *)>lmv);
+   lmv_free_memmd(md->lmv);
if (!tgt || !tgt->ltd_exp)
return -EINVAL;
return md_free_lustre_md(tgt->ltd_exp, md);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 07/80] staging: lustre: lmv: remove unused lmv_get_mea function

2016-08-16 Thread James Simmons
From: wang di 

The function lmv_get_mea() is not used so remove it.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_internal.h |   24 --
 1 files changed, 0 insertions(+), 24 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h 
b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
index 471470b..ab01560 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h
+++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
@@ -55,30 +55,6 @@ int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, 
u32 mds);
 int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
  struct md_op_data *op_data);
 
-static inline struct lmv_stripe_md *lmv_get_mea(struct ptlrpc_request *req)
-{
-   struct mdt_body  *body;
-   struct lmv_stripe_md*mea;
-
-   LASSERT(req);
-
-   body = req_capsule_server_get(>rq_pill, _MDT_BODY);
-
-   if (!body || !S_ISDIR(body->mode) || !body->eadatasize)
-   return NULL;
-
-   mea = req_capsule_server_sized_get(>rq_pill, _MDT_MD,
-  body->eadatasize);
-   if (mea->mea_count == 0)
-   return NULL;
-   if (mea->mea_magic != MEA_MAGIC_LAST_CHAR &&
-   mea->mea_magic != MEA_MAGIC_ALL_CHARS &&
-   mea->mea_magic != MEA_MAGIC_HASH_SEGMENT)
-   return NULL;
-
-   return mea;
-}
-
 static inline int lmv_get_easize(struct lmv_obd *lmv)
 {
return sizeof(struct lmv_stripe_md) +
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 15/80] staging: lustre: obdclass: fix lmd_parse() to handle comma-separated NIDs

2016-08-16 Thread James Simmons
From: Jian Yu 

This patch handles the  upgrade situation that old mountdata already
contains comma-separated NIDs. The correct way to fix the original
issue is to parse comma-separated NIDs in lmd_parse().

Signed-off-by: Jian Yu 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4460
Reviewed-on: http://review.whamcloud.com/8918
Reviewed-by: Niu Yawei 
Reviewed-by: Bobi Jam 
Reviewed-by: Sebastien Buisson 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/obdclass/obd_mount.c |   20 
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/obdclass/obd_mount.c 
b/drivers/staging/lustre/lustre/obdclass/obd_mount.c
index aa84a50..4931e37 100644
--- a/drivers/staging/lustre/lustre/obdclass/obd_mount.c
+++ b/drivers/staging/lustre/lustre/obdclass/obd_mount.c
@@ -880,7 +880,7 @@ static int lmd_parse_mgs(struct lustre_mount_data *lmd, 
char **ptr)
  */
 static int lmd_parse(char *options, struct lustre_mount_data *lmd)
 {
-   char *s1, *s2, *devname = NULL;
+   char *s1, *s2, *s3, *devname = NULL;
struct lustre_mount_data *raw = (struct lustre_mount_data *)options;
int rc = 0;
 
@@ -913,6 +913,7 @@ static int lmd_parse(char *options, struct 
lustre_mount_data *lmd)
/* Skip whitespace and extra commas */
while (*s1 == ' ' || *s1 == ',')
s1++;
+   s3 = s1;
 
/* Client options are parsed in ll_options: eg. flock,
 * user_xattr, acl
@@ -970,6 +971,7 @@ static int lmd_parse(char *options, struct 
lustre_mount_data *lmd)
rc = lmd_parse_mgssec(lmd, s1 + 7);
if (rc)
goto invalid;
+   s3 = s2;
clear++;
/* ost exclusion list */
} else if (strncmp(s1, "exclude=", 8) == 0) {
@@ -990,10 +992,19 @@ static int lmd_parse(char *options, struct 
lustre_mount_data *lmd)
size_t length, params_length;
char *tail = strchr(s1 + 6, ',');
 
-   if (!tail)
+   if (!tail) {
length = strlen(s1);
-   else
-   length = tail - s1;
+   } else {
+   lnet_nid_t nid;
+   char *param_str = tail + 1;
+   int supplementary = 1;
+
+   while (!class_parse_nid_quiet(param_str, ,
+ _str)) {
+   supplementary = 0;
+   }
+   length = param_str - s1 - supplementary;
+   }
length -= 6;
params_length = strlen(lmd->lmd_params);
if (params_length + length + 1 >= LMD_PARAMS_MAXLEN)
@@ -1001,6 +1012,7 @@ static int lmd_parse(char *options, struct 
lustre_mount_data *lmd)
strncat(lmd->lmd_params, s1 + 6, length);
lmd->lmd_params[params_length + length] = '\0';
strlcat(lmd->lmd_params, " ", LMD_PARAMS_MAXLEN);
+   s3 = s1 + 6 + length;
clear++;
} else if (strncmp(s1, "osd=", 4) == 0) {
rc = lmd_parse_string(>lmd_osd_type, s1 + 4);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 18/80] staging: lustre: lmv: fix issue found by Klocwork Insight tool

2016-08-16 Thread James Simmons
From: Dmitry Eremin 

'plock.cookie' might be used uninitialized in this function.

sscanf format specification '%d' expects type 'int *' for 'd',
but parameter 3 has a different type '__u32*'

Signed-off-by: Dmitry Eremin 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4629
Reviewed-on: http://review.whamcloud.com/9390
Reviewed-by: John L. Hammond 
Reviewed-by: James Simmons 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |6 --
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c 
b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
index 2bc1098..51b7048 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
@@ -137,8 +137,10 @@ static int lmv_intent_remote(struct obd_export *exp, void 
*lmm,
it->it_remote_lock_mode = it->it_lock_mode;
}
 
-   it->it_lock_handle = plock.cookie;
-   it->it_lock_mode = pmode;
+   if (pmode) {
+   it->it_lock_handle = plock.cookie;
+   it->it_lock_mode = pmode;
+   }
 
 out_free_op_data:
kfree(op_data);
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 09b2efe..c005a66 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -1419,7 +1419,7 @@ static int lmv_process_config(struct obd_device *obd, u32 
len, void *buf)
 
obd_str2uuid(_uuid,  lustre_cfg_buf(lcfg, 1));
 
-   if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", ) != 1) {
+   if (sscanf(lustre_cfg_buf(lcfg, 2), "%u", ) != 1) {
rc = -EINVAL;
goto out;
}
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 35/80] staging: lustre: obdclass: unified flow control interfaces

2016-08-16 Thread James Simmons
From: Fan Yong 

Unify the flow control interfaces for MDC RPC and FLD RPC.
We allow to adjust the maximum inflight RPCs count via /sys
interface.

Signed-off-by: Fan Yong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4687
Reviewed-on: http://review.whamcloud.com/9562
Reviewed-by: Niu Yawei 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/fld/fld_request.c|   55 +
 drivers/staging/lustre/lustre/include/lustre_mdc.h |5 -
 drivers/staging/lustre/lustre/include/obd.h|   14 +--
 drivers/staging/lustre/lustre/include/obd_class.h  |5 +
 drivers/staging/lustre/lustre/ldlm/ldlm_lib.c  |4 +-
 drivers/staging/lustre/lustre/mdc/lproc_mdc.c  |   17 +--
 drivers/staging/lustre/lustre/mdc/mdc_internal.h   |2 -
 drivers/staging/lustre/lustre/mdc/mdc_lib.c|   64 --
 drivers/staging/lustre/lustre/mdc/mdc_locks.c  |   10 +-
 drivers/staging/lustre/lustre/mdc/mdc_request.c|6 +-
 drivers/staging/lustre/lustre/obdclass/genops.c|  132 
 11 files changed, 161 insertions(+), 153 deletions(-)

diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c 
b/drivers/staging/lustre/lustre/fld/fld_request.c
index e59d626..ed7962e 100644
--- a/drivers/staging/lustre/lustre/fld/fld_request.c
+++ b/drivers/staging/lustre/lustre/fld/fld_request.c
@@ -53,57 +53,6 @@
 #include "../include/lustre_mdc.h"
 #include "fld_internal.h"
 
-/* TODO: these 3 functions are copies of flow-control code from mdc_lib.c
- * It should be common thing. The same about mdc RPC lock
- */
-static int fld_req_avail(struct client_obd *cli, struct mdc_cache_waiter *mcw)
-{
-   int rc;
-
-   spin_lock(>cl_loi_list_lock);
-   rc = list_empty(>mcw_entry);
-   spin_unlock(>cl_loi_list_lock);
-   return rc;
-};
-
-static void fld_enter_request(struct client_obd *cli)
-{
-   struct mdc_cache_waiter mcw;
-   struct l_wait_info lwi = { 0 };
-
-   spin_lock(>cl_loi_list_lock);
-   if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-   list_add_tail(_entry, >cl_cache_waiters);
-   init_waitqueue_head(_waitq);
-   spin_unlock(>cl_loi_list_lock);
-   l_wait_event(mcw.mcw_waitq, fld_req_avail(cli, ), );
-   } else {
-   cli->cl_r_in_flight++;
-   spin_unlock(>cl_loi_list_lock);
-   }
-}
-
-static void fld_exit_request(struct client_obd *cli)
-{
-   struct list_head *l, *tmp;
-   struct mdc_cache_waiter *mcw;
-
-   spin_lock(>cl_loi_list_lock);
-   cli->cl_r_in_flight--;
-   list_for_each_safe(l, tmp, >cl_cache_waiters) {
-   if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-   /* No free request slots anymore */
-   break;
-   }
-
-   mcw = list_entry(l, struct mdc_cache_waiter, mcw_entry);
-   list_del_init(>mcw_entry);
-   cli->cl_r_in_flight++;
-   wake_up(>mcw_waitq);
-   }
-   spin_unlock(>cl_loi_list_lock);
-}
-
 static int fld_rrb_hash(struct lu_client_fld *fld, u64 seq)
 {
LASSERT(fld->lcf_count > 0);
@@ -439,9 +388,9 @@ int fld_client_rpc(struct obd_export *exp,
req->rq_reply_portal = MDC_REPLY_PORTAL;
ptlrpc_at_set_req_timeout(req);
 
-   fld_enter_request(>exp_obd->u.cli);
+   obd_get_request_slot(>exp_obd->u.cli);
rc = ptlrpc_queue_wait(req);
-   fld_exit_request(>exp_obd->u.cli);
+   obd_put_request_slot(>exp_obd->u.cli);
if (rc)
goto out_req;
 
diff --git a/drivers/staging/lustre/lustre/include/lustre_mdc.h 
b/drivers/staging/lustre/lustre/include/lustre_mdc.h
index 0a8c639..bf6f87a 100644
--- a/drivers/staging/lustre/lustre/include/lustre_mdc.h
+++ b/drivers/staging/lustre/lustre/include/lustre_mdc.h
@@ -179,11 +179,6 @@ static inline void mdc_update_max_ea_from_body(struct 
obd_export *exp,
}
 }
 
-struct mdc_cache_waiter {
-   struct list_head  mcw_entry;
-   wait_queue_head_tmcw_waitq;
-};
-
 /* mdc/mdc_locks.c */
 int it_open_error(int phase, struct lookup_intent *it);
 
diff --git a/drivers/staging/lustre/lustre/include/obd.h 
b/drivers/staging/lustre/lustre/include/obd.h
index f5eeb05..cacd472 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
@@ -211,11 +211,12 @@ struct timeout_item {
struct list_head ti_chain;
 };
 
-#define OSC_MAX_RIF_DEFAULT   8
-#define OSC_MAX_RIF_MAX 256
-#define OSC_MAX_DIRTY_DEFAULT  (OSC_MAX_RIF_DEFAULT * 4)
-#define OSC_MAX_DIRTY_MB_MAX   2048 /* arbitrary, but < MAX_LONG bytes */
-#define OSC_DEFAULT_RESENDS  10
+#define OBD_MAX_RIF_DEFAULT8
+#define 

[PATCH 25/80] staging: lustre: const correct FID/OSTID/... helpers

2016-08-16 Thread James Simmons
From: John L. Hammond 

Add a const qualifier wherever possible to the pointer parameters of
the inline helper functions in lustre_idl.h and lustre_fid.h.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2675
Reviewed-on: http://review.whamcloud.com/8641
Reviewed-by: wangdi 
Reviewed-by: Fan Yong 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   28 ++--
 drivers/staging/lustre/lustre/include/lustre_fid.h |9 +++---
 2 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 87e79b9..c932e20 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1033,7 +1033,7 @@ static inline int lu_dirent_calc_size(int namelen, __u16 
attr)
return (size + 7) & ~7;
 }
 
-static inline int lu_dirent_size(struct lu_dirent *ent)
+static inline int lu_dirent_size(const struct lu_dirent *ent)
 {
if (le16_to_cpu(ent->lde_reclen) == 0) {
return lu_dirent_calc_size(le16_to_cpu(ent->lde_namelen),
@@ -1067,7 +1067,7 @@ struct lustre_handle {
 
 #define DEAD_HANDLE_MAGIC 0xdeadbeefcafebabeULL
 
-static inline int lustre_handle_is_used(struct lustre_handle *lh)
+static inline int lustre_handle_is_used(const struct lustre_handle *lh)
 {
return lh->cookie != 0ull;
 }
@@ -1079,7 +1079,7 @@ static inline int lustre_handle_equal(const struct 
lustre_handle *lh1,
 }
 
 static inline void lustre_handle_copy(struct lustre_handle *tgt,
- struct lustre_handle *src)
+ const struct lustre_handle *src)
 {
tgt->cookie = src->cookie;
 }
@@ -1570,25 +1570,25 @@ static inline void lmm_oi_set_id(struct ost_id *oi, 
__u64 oid)
oi->oi.oi_id = oid;
 }
 
-static inline __u64 lmm_oi_id(struct ost_id *oi)
+static inline __u64 lmm_oi_id(const struct ost_id *oi)
 {
return oi->oi.oi_id;
 }
 
-static inline __u64 lmm_oi_seq(struct ost_id *oi)
+static inline __u64 lmm_oi_seq(const struct ost_id *oi)
 {
return oi->oi.oi_seq;
 }
 
 static inline void lmm_oi_le_to_cpu(struct ost_id *dst_oi,
-   struct ost_id *src_oi)
+   const struct ost_id *src_oi)
 {
dst_oi->oi.oi_id = le64_to_cpu(src_oi->oi.oi_id);
dst_oi->oi.oi_seq = le64_to_cpu(src_oi->oi.oi_seq);
 }
 
 static inline void lmm_oi_cpu_to_le(struct ost_id *dst_oi,
-   struct ost_id *src_oi)
+   const struct ost_id *src_oi)
 {
dst_oi->oi.oi_id = cpu_to_le64(src_oi->oi.oi_id);
dst_oi->oi.oi_seq = cpu_to_le64(src_oi->oi.oi_seq);
@@ -2724,15 +2724,15 @@ struct ldlm_extent {
 
 #define LDLM_GID_ANY ((__u64)-1)
 
-static inline int ldlm_extent_overlap(struct ldlm_extent *ex1,
- struct ldlm_extent *ex2)
+static inline int ldlm_extent_overlap(const struct ldlm_extent *ex1,
+ const struct ldlm_extent *ex2)
 {
return (ex1->start <= ex2->end) && (ex2->start <= ex1->end);
 }
 
 /* check if @ex1 contains @ex2 */
-static inline int ldlm_extent_contain(struct ldlm_extent *ex1,
- struct ldlm_extent *ex2)
+static inline int ldlm_extent_contain(const struct ldlm_extent *ex1,
+ const struct ldlm_extent *ex2)
 {
return (ex1->start <= ex2->start) && (ex1->end >= ex2->end);
 }
@@ -3092,7 +3092,7 @@ enum agent_req_status {
ARS_SUCCEED,
 };
 
-static inline char *agent_req_status2name(enum agent_req_status ars)
+static inline const char *agent_req_status2name(const enum agent_req_status 
ars)
 {
switch (ars) {
case ARS_WAITING:
@@ -3268,7 +3268,7 @@ struct obdo {
 #define o_cksum   o_nlink
 #define o_grant_used o_data_version
 
-static inline void lustre_set_wire_obdo(struct obd_connect_data *ocd,
+static inline void lustre_set_wire_obdo(const struct obd_connect_data *ocd,
struct obdo *wobdo,
const struct obdo *lobdo)
 {
@@ -3287,7 +3287,7 @@ static inline void lustre_set_wire_obdo(struct 
obd_connect_data *ocd,
}
 }
 
-static inline void lustre_get_wire_obdo(struct obd_connect_data *ocd,
+static inline void lustre_get_wire_obdo(const struct obd_connect_data *ocd,
struct obdo *lobdo,
const struct obdo *wobdo)
 {
diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h 
b/drivers/staging/lustre/lustre/include/lustre_fid.h

[PATCH 40/80] staging: lustre: ptlrpc: Early replies need to honor at_max

2016-08-16 Thread James Simmons
From: Chris Horn 

When determining whether an early reply can be sent the server will
calculate the new deadline based on an offset from the request
arrival time. However, when actually setting the new deadline
the server offsets the current time. This can result in deadlines
being extended more than at_max seconds past the request arrival
time. Instead, the server should offset the arrival time when updating
its request timeout.

When a client receives an early reply it doesn't know the server side
arrival time so we use the original sent time as an approximation.

Signed-off-by: Chris Horn 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4578
Reviewed-on: http://review.whamcloud.com/9100
Reviewed-by: James Simmons 
Reviewed-by: Christopher J. Morrone 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/ptlrpc/client.c  |8 +---
 drivers/staging/lustre/lustre/ptlrpc/import.c  |   11 +++
 drivers/staging/lustre/lustre/ptlrpc/service.c |   18 +-
 3 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c 
b/drivers/staging/lustre/lustre/ptlrpc/client.c
index 549c62c..f2e71b4 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/client.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/client.c
@@ -385,10 +385,12 @@ static int ptlrpc_at_recv_early_reply(struct 
ptlrpc_request *req)
spin_lock(>rq_lock);
olddl = req->rq_deadline;
/*
-* server assumes it now has rq_timeout from when it sent the
-* early reply, so client should give it at least that long.
+* server assumes it now has rq_timeout from when the request
+* arrived, so the client should give it at least that long.
+* since we don't know the arrival time we'll use the original
+* sent time
 */
-   req->rq_deadline = ktime_get_real_seconds() + req->rq_timeout +
+   req->rq_deadline = req->rq_sent + req->rq_timeout +
   ptlrpc_at_get_net_latency(req);
 
DEBUG_REQ(D_ADAPTTO, req,
diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c 
b/drivers/staging/lustre/lustre/ptlrpc/import.c
index 3292e6e..af8ffbc 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/import.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/import.c
@@ -1497,10 +1497,13 @@ EXPORT_SYMBOL(ptlrpc_disconnect_import);
 /* Adaptive Timeout utils */
 extern unsigned int at_min, at_max, at_history;
 
-/* Bin into timeslices using AT_BINS bins.
- * This gives us a max of the last binlimit*AT_BINS secs without the storage,
- * but still smoothing out a return to normalcy from a slow response.
- * (E.g. remember the maximum latency in each minute of the last 4 minutes.)
+/*
+ *Update at_current with the specified value (bounded by at_min and at_max),
+ * as well as the AT history "bins".
+ *  - Bin into timeslices using AT_BINS bins.
+ *  - This gives us a max of the last at_history seconds without the storage,
+ *but still smoothing out a return to normalcy from a slow response.
+ *  - (E.g. remember the maximum latency in each minute of the last 4 minutes.)
  */
 int at_measured(struct adaptive_timeout *at, unsigned int val)
 {
diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c 
b/drivers/staging/lustre/lustre/ptlrpc/service.c
index 4788c49..30d8b72 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/service.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/service.c
@@ -1005,13 +1005,16 @@ ptlrpc_at_remove_timed(struct ptlrpc_request *req)
array->paa_count--;
 }
 
+/*
+ * Attempt to extend the request deadline by sending an early reply to the
+ * client.
+ */
 static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req)
 {
struct ptlrpc_service_part *svcpt = req->rq_rqbd->rqbd_svcpt;
struct ptlrpc_request *reqcopy;
struct lustre_msg *reqmsg;
long olddl = req->rq_deadline - ktime_get_real_seconds();
-   time64_t newdl;
int rc;
 
/* deadline is when the client expects us to reply, margin is the
@@ -1039,8 +1042,13 @@ static int ptlrpc_at_send_early_reply(struct 
ptlrpc_request *req)
return -ENOSYS;
}
 
-   /* Fake our processing time into the future to ask the clients
-* for some extra amount of time
+   /*
+* We want to extend the request deadline by at_extra seconds,
+* so we set our service estimate to reflect how much time has
+* passed since this request arrived plus an additional
+* at_extra seconds. The client will calculate the new deadline
+* based on this service estimate (plus some additional time to
+* account for network latency). See ptlrpc_at_recv_early_reply
 */
at_measured(>scp_at_estimate, at_extra +
ktime_get_real_seconds() - 

[PATCH 33/80] staging: lustre: lmv: cleanup req in lmv_getattr_name()

2016-08-16 Thread James Simmons
From: John L. Hammond 

In lmv_getattr_name() don't return a freed request in the error path.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4826
Reviewed-on: http://review.whamcloud.com/9863
Reviewed-by: Nathaniel Clark 
Reviewed-by: Bob Glossman 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 5929994..f1b8ae9 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -1920,6 +1920,7 @@ lmv_getattr_name(struct obd_export *exp, struct 
md_op_data *op_data,
tgt = lmv_find_target(lmv, );
if (IS_ERR(tgt)) {
ptlrpc_req_finished(*request);
+   *request = NULL;
return PTR_ERR(tgt);
}
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 37/80] staging: lustre: ldlm: flock completion fixes.

2016-08-16 Thread James Simmons
From: Vitaly Fertman 

Move checks for FAILED, DESTROYED flags under ldlm spinlock,
destroy flock atomically with the check it is not destroyed yet.
Do not put the granted flock into the resource if this is
UNLOCK, TEST, or DEADLOCK'ed flock.

Later a regression for this patch was reported under LU-7626.
The refcount nonzero (1) after lock cleanup errors was reported.
The reason is that the case LCK_NL was not handled for obdecho.
Patch 17791 resolved this issue which has been combined into
this upstream patch.

Signed-off-by: Vitaly Fertman 
Signed-off-by: Andriy Skulysh 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2177
Reviewed-by: Alexey Lyashkov 
Reviewed-by: Andriy Skulysh 
Reviewed-by: Vitaly Fertman 
Xyratex-bug-id: MRP-1588
Reviewed-on: http://review.whamcloud.com/10005
Reviewed-by: Bobi Jam 
Reviewed-by: Oleg Drokin 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7626
Reviewed-by: Mirza Arshad Mirza Hussain 
Reviewed-by: Alexey Leonidovich Lyashkov 
Reviewed-on: http://review.whamcloud.com/17791
Reviewed-by: Niu Yawei 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/include/linux/libcfs/libcfs_fail.h  |3 +
 drivers/staging/lustre/lnet/libcfs/fail.c  |6 +-
 .../lustre/lustre/include/lustre_dlm_flags.h   |   36 ---
 .../staging/lustre/lustre/include/obd_support.h|4 +
 drivers/staging/lustre/lustre/ldlm/ldlm_flock.c|   98 ++--
 drivers/staging/lustre/lustre/ldlm/ldlm_lock.c |   23 -
 drivers/staging/lustre/lustre/ldlm/ldlm_request.c  |   16 ++--
 drivers/staging/lustre/lustre/ldlm/ldlm_resource.c |8 ++-
 drivers/staging/lustre/lustre/llite/file.c |   20 +++--
 9 files changed, 148 insertions(+), 66 deletions(-)

diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h 
b/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h
index d3f9a60..bdbbe93 100644
--- a/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h
+++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h
@@ -143,6 +143,9 @@ static inline int cfs_fail_timeout_set(__u32 id, __u32 
value, int ms, int set)
 #define CFS_FAIL_TIMEOUT_ORSET(id, value, secs) \
cfs_fail_timeout_set(id, value, secs * 1000, CFS_FAIL_LOC_ORSET)
 
+#define CFS_FAIL_TIMEOUT_RESET(id, value, secs) \
+   cfs_fail_timeout_set(id, value, secs * 1000, CFS_FAIL_LOC_RESET)
+
 #define CFS_FAIL_TIMEOUT_MS_ORSET(id, value, ms) \
cfs_fail_timeout_set(id, value, ms, CFS_FAIL_LOC_ORSET)
 
diff --git a/drivers/staging/lustre/lnet/libcfs/fail.c 
b/drivers/staging/lustre/lnet/libcfs/fail.c
index 9288ee0..e4b1a0a 100644
--- a/drivers/staging/lustre/lnet/libcfs/fail.c
+++ b/drivers/staging/lustre/lnet/libcfs/fail.c
@@ -90,8 +90,10 @@ int __cfs_fail_check_set(__u32 id, __u32 value, int set)
}
}
 
-   if ((set == CFS_FAIL_LOC_ORSET || set == CFS_FAIL_LOC_RESET) &&
-   (value & CFS_FAIL_ONCE))
+   /* Take into account the current call for FAIL_ONCE for ORSET only,
+* as RESET is a new fail_loc, it does not change the current call
+*/
+   if ((set == CFS_FAIL_LOC_ORSET) && (value & CFS_FAIL_ONCE))
set_bit(CFS_FAIL_ONCE_BIT, _fail_loc);
/* Lost race to set CFS_FAILED_BIT. */
if (test_and_set_bit(CFS_FAILED_BIT, _fail_loc)) {
diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm_flags.h 
b/drivers/staging/lustre/lustre/include/lustre_dlm_flags.h
index e7e0c21..a0f064d 100644
--- a/drivers/staging/lustre/lustre/include/lustre_dlm_flags.h
+++ b/drivers/staging/lustre/lustre/include/lustre_dlm_flags.h
@@ -28,21 +28,6 @@
 /** l_flags bits marked as "all_flags" bits */
 #define LDLM_FL_ALL_FLAGS_MASK  0x00FFC08F932FULL
 
-/** l_flags bits marked as "ast" bits */
-#define LDLM_FL_AST_MASK0x80008000ULL
-
-/** l_flags bits marked as "blocked" bits */
-#define LDLM_FL_BLOCKED_MASK0x000EULL
-
-/** l_flags bits marked as "gone" bits */
-#define LDLM_FL_GONE_MASK   0x00060040ULL
-
-/** l_flags bits marked as "inherit" bits */
-#define LDLM_FL_INHERIT_MASK0x0080ULL
-
-/** l_flags bits marked as "off_wire" bits */
-#define LDLM_FL_OFF_WIRE_MASK   0x00FFULL
-
 /** extent, mode, or resource changed */
 #define LDLM_FL_LOCK_CHANGED0x0001ULL /* bit 0 */
 #define ldlm_is_lock_changed(_l)LDLM_TEST_FLAG((_l), 1ULL <<  0)
@@ -372,6 +357,27 @@
 #define ldlm_set_excl(_l)   LDLM_SET_FLAG((_l), 1ULL << 55)
 

[PATCH 47/80] staging: lustre: uapi: reduce scope of lustre_idl.h

2016-08-16 Thread James Simmons
From: John L. Hammond 

Move the definition of OBD_OCD_VERSION() and similar macros from
lustre_idl.h to lustre_ver.h. These macros are primarily used in
comparisons to LUSTRE_VERSION_CODE which is defined in lustre_ver.h
and so should be defined there as well. Move a few definitions
(related to FIDs, quota and striping) from lustre_idl.h to
lustre_user.h.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5065
Reviewed-on: http://review.whamcloud.com/10336
Reviewed-by: Andreas Dilger 
Reviewed-by: Bob Glossman 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   38 +--
 .../lustre/lustre/include/lustre/lustre_user.h |   32 +++--
 drivers/staging/lustre/lustre/include/lustre_ver.h |   13 +--
 3 files changed, 41 insertions(+), 42 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 8736826..69bed64 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -93,6 +93,7 @@
 /* Defn's shared with user-space. */
 #include "lustre_user.h"
 #include "lustre_errno.h"
+#include "../lustre_ver.h"
 
 /*
  *  GENERAL STUFF
@@ -846,11 +847,6 @@ static inline bool fid_is_sane(const struct lu_fid *fid)
fid_seq_is_rsvd(fid_seq(fid)));
 }
 
-static inline bool fid_is_zero(const struct lu_fid *fid)
-{
-   return fid_seq(fid) == 0 && fid_oid(fid) == 0;
-}
-
 void lustre_swab_lu_fid(struct lu_fid *fid);
 void lustre_swab_lu_seq_range(struct lu_seq_range *range);
 
@@ -1318,14 +1314,6 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb);
 #define CLIENT_CONNECT_MDT_REQD (OBD_CONNECT_IBITS | OBD_CONNECT_FID | \
 OBD_CONNECT_FULL20)
 
-#define OBD_OCD_VERSION(major, minor, patch, fix) (((major)<<24) + \
- ((minor)<<16) + \
- ((patch)<<8) + (fix))
-#define OBD_OCD_VERSION_MAJOR(version) ((int)((version)>>24)&255)
-#define OBD_OCD_VERSION_MINOR(version) ((int)((version)>>16)&255)
-#define OBD_OCD_VERSION_PATCH(version) ((int)((version)>>8)&255)
-#define OBD_OCD_VERSION_FIX(version)   ((int)(version)&255)
-
 /* This structure is used for both request and reply.
  *
  * If we eventually have separate connect data for different types, which we
@@ -1509,14 +1497,6 @@ enum obdo_flags {
 #define LOV_MAGIC_V1_DEF  0x0CD10BD0
 #define LOV_MAGIC_V3_DEF  0x0CD30BD0
 
-#define LOV_PATTERN_RAID0  0x001   /* stripes are used round-robin */
-#define LOV_PATTERN_RAID1  0x002   /* stripes are mirrors of each other */
-#define LOV_PATTERN_FIRST  0x100   /* first stripe is not in round-robin */
-#define LOV_PATTERN_CMOBD  0x200
-
-#define LOV_PATTERN_F_MASK 0x
-#define LOV_PATTERN_F_RELEASED 0x8000 /* HSM released file */
-
 #define lov_pattern(pattern)   (pattern & ~LOV_PATTERN_F_MASK)
 #define lov_pattern_flags(pattern) (pattern & LOV_PATTERN_F_MASK)
 
@@ -1796,7 +1776,7 @@ void lustre_swab_obd_statfs(struct obd_statfs *os);
  * it to sync quickly
  */
 
-#define OBD_OBJECT_EOF 0xULL
+#define OBD_OBJECT_EOF LUSTRE_EOF
 
 #define OST_MIN_PRECREATE 32
 #define OST_MAX_PRECREATE 2
@@ -1892,12 +1872,6 @@ struct obd_quotactl {
 
 void lustre_swab_obd_quotactl(struct obd_quotactl *q);
 
-#define Q_QUOTACHECK   0x800100 /* deprecated as of 2.4 */
-#define Q_INITQUOTA0x800101 /* deprecated as of 2.4  */
-#define Q_GETOINFO 0x800102 /* get obd quota info */
-#define Q_GETOQUOTA0x800103 /* get obd quotas */
-#define Q_FINVALIDATE  0x800104 /* deprecated as of 2.4 */
-
 #define Q_COPY(out, in, member) (out)->member = (in)->member
 
 #define QCTL_COPY(out, in) \
@@ -2533,19 +2507,11 @@ struct lmv_mds_md_v1 {
  * for example the object is being migrated. And the hash function
  * might be interpreted differently with different flags.
  */
-enum lmv_hash_type {
-   LMV_HASH_TYPE_ALL_CHARS = 1,
-   LMV_HASH_TYPE_FNV_1A_64 = 2,
-};
-
 #define LMV_HASH_TYPE_MASK 0x
 
 #define LMV_HASH_FLAG_MIGRATION0x8000
 #define LMV_HASH_FLAG_DEAD 0x4000
 
-#define LMV_HASH_NAME_ALL_CHARS"all_char"
-#define LMV_HASH_NAME_FNV_1A_64"fnv_1a_64"
-
 /**
  * The FNV-1a hash algorithm is as follows:
  * hash = FNV_offset_basis
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index 59d45de..8398c4f 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ 

[PATCH 52/80] staging: lustre: llite: use the correct mode for striped directory

2016-08-16 Thread James Simmons
From: wang di 

Create striped directory with correct mode, which should be
handling same as mkdir.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4929
Reviewed-on: http://review.whamcloud.com/10028
Reviewed-by: Andreas Dilger 
Reviewed-by: John L. Hammond 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c |   40 +++-
 1 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 3fed80d..a1b5143 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -694,28 +694,40 @@ static int ll_send_mgc_param(struct obd_export *mgc, char 
*string)
return rc;
 }
 
-static int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump,
-  const char *filename)
+/**
+ * Create striped directory with specified stripe(@lump)
+ *
+ * param[in] parentthe parent of the directory.
+ * param[in] lump  the specified stripes.
+ * param[in] dirname   the name of the directory.
+ * param[in] mode  the specified mode of the directory.
+ *
+ * retval  =0 if striped directory is being created successfully.
+ * <0 if the creation is failed.
+ */
+static int ll_dir_setdirstripe(struct inode *parent, struct lmv_user_md *lump,
+  const char *dirname, umode_t mode)
 {
struct ptlrpc_request *request = NULL;
struct md_op_data *op_data;
-   struct ll_sb_info *sbi = ll_i2sbi(dir);
-   int mode;
+   struct ll_sb_info *sbi = ll_i2sbi(parent);
int err;
 
if (unlikely(lump->lum_magic != LMV_USER_MAGIC))
return -EINVAL;
 
CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) name %s stripe_offset %d, 
stripe_count: %u\n",
-  PFID(ll_inode2fid(dir)), dir, filename,
+  PFID(ll_inode2fid(parent)), parent, dirname,
   (int)lump->lum_stripe_offset, lump->lum_stripe_count);
 
if (lump->lum_magic != cpu_to_le32(LMV_USER_MAGIC))
lustre_swab_lmv_user_md(lump);
 
-   mode = (~current_umask() & 0755) | S_IFDIR;
-   op_data = ll_prep_md_op_data(NULL, dir, NULL, filename,
-strlen(filename), mode, LUSTRE_OPC_MKDIR,
+   if (!IS_POSIXACL(parent) || !exp_connect_umask(ll_i2mdexp(parent)))
+   mode &= ~current_umask();
+   mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
+   op_data = ll_prep_md_op_data(NULL, parent, NULL, dirname,
+strlen(dirname), mode, LUSTRE_OPC_MKDIR,
 lump);
if (IS_ERR(op_data)) {
err = PTR_ERR(op_data);
@@ -1379,6 +1391,7 @@ out_free:
char*filename;
int  namelen = 0;
int  lumlen = 0;
+   umode_t mode;
int  len;
int  rc;
 
@@ -1412,11 +1425,12 @@ out_free:
goto lmv_out_free;
}
 
-   /**
-* ll_dir_setdirstripe will be used to set dir stripe
-*  mdc_create--->mdt_reint_create (with dirstripe)
-*/
-   rc = ll_dir_setdirstripe(inode, lum, filename);
+#if OBD_OCD_VERSION(2, 9, 50, 0) > LUSTRE_VERSION_CODE
+   mode = data->ioc_type != 0 ? data->ioc_type : S_IRWXUGO;
+#else
+   mode = data->ioc_type;
+#endif
+   rc = ll_dir_setdirstripe(inode, lum, filename, mode);
 lmv_out_free:
obd_ioctl_freedata(buf, len);
return rc;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 50/80] staging: lustre: lov: new pattern flag for partially repaired file

2016-08-16 Thread James Simmons
From: Fan Yong 

When the layout LFSCK repairs orphan OST-object, if the parent
MDT-object was lost, then it will re-create the MDT-object and
regenerate the LOV EA and fill the target LOV EA slot with the
orphan information, and fill other slots with zero (LOV hole);
if related LOV EA slot is invalid or hole, then it will refill
the target LOV EA slot; if the target slot exceeds current LOV
EA tail, then extend the LOV EA, and fill the gaps as zero.

Some of the LOV EA holes may cannot be re-filled finally because
of lost some OST-objects. And even if they can be re-filled, but
there are still some possible race accessings from client before
the re-filling. If the client access the LOV EA with hole(s), it
may cause some strange behaviour, such as trigger LBUG()/LASSERT()
on the client.

So we will make the client to be aware of the LOV EA is incomplete.
We introduce a new LOV EA pattern flag LOV_PATTERN_F_HOLE for that:
any time when the LFSCK repairs the LOV EA with hole(s), the LOV EA
will be marked as LOV_PATTERN_F_HOLE; when all the holes in the LOV
EA are refilled, the LOV_PATTERN_F_HOLE will be dropped.

For a new client, it recongizes the pattern flag LOV_PATTERN_F_HOLE,
then it can permit/forbid some opertions on the file with LOV holes:

 1) Normal read/write the file with LOV EA hole is permitted, but the
application will get EIO error when read data from the dummy slot
or write data to the dummy slot.
 2) The users can dump the recovered data via some common read tools,
such as "dd conv=sync,noerror".

 3) Append data to the file which has LOV EA hole will get EIO failure.

 4) Other operations will skip the LOV EA hole(s), and will not get
failures, such as {s,g}etattr, {s,g}getxattr, stat, chown/chgrp,
chmod, touch, unlink, and so on.

For an old client, since it will not recognize the new pattern flag
LOV_PATTERN_F_HOLE. So the LOV EA with hole will be dicarded with
failure, but it will not cause the client to be crashed.

Signed-off-by: Fan Yong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4675
Reviewed-on: http://review.whamcloud.com/10042
Reviewed-by: Andreas Dilger 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |1 +
 .../lustre/lustre/include/lustre/lustre_user.h |2 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c|2 +-
 drivers/staging/lustre/lustre/lov/lov_io.c |   16 +---
 .../lustre/lustre/obdclass/lprocfs_status.c|2 ++
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|2 ++
 6 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 69bed64..87eef4c 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1289,6 +1289,7 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb);
 #define OBD_CONNECT_OPEN_BY_FID0x20ULL /* open by fid 
won't pack
 * name in request
 */
+#define OBD_CONNECT_LFSCK  0x40ULL/* support online LFSCK */
 
 /* XXX README XXX:
  * Please DO NOT add flag values here before first ensuring that this same
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index 8398c4f..9e38ed3 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
@@ -284,9 +284,9 @@ struct ost_id {
 #define LOV_PATTERN_CMOBD  0x200
 
 #define LOV_PATTERN_F_MASK 0x
+#define LOV_PATTERN_F_HOLE 0x4000 /* there is hole in LOV EA */
 #define LOV_PATTERN_F_RELEASED 0x8000 /* HSM released file */
 
-
 #define LOV_MAXPOOLNAME 16
 #define LOV_POOLNAMEF "%.16s"
 
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c 
b/drivers/staging/lustre/lustre/llite/llite_lib.c
index ac59cd6..dd44ee8 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -189,7 +189,7 @@ static int client_common_fill_super(struct super_block *sb, 
char *md, char *dt,
  OBD_CONNECT_PINGLESS |
  OBD_CONNECT_MAX_EASIZE |
  OBD_CONNECT_FLOCK_DEAD |
- OBD_CONNECT_DISP_STRIPE;
+ OBD_CONNECT_DISP_STRIPE | OBD_CONNECT_LFSCK;
 
if (sbi->ll_flags & LL_SBI_SOM_PREVIEW)
data->ocd_connect_flags |= OBD_CONNECT_SOM;
diff --git 

[PATCH 42/80] staging: lustre: llite: validate names

2016-08-16 Thread James Simmons
From: John L. Hammond 

In ll_prep_md_op_data() validate names according to the same formula
used in mdd_name_check(). Add mdc_pack_name() to validate the name
actually packed in the request.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4992
Reviewed-on: http://review.whamcloud.com/10198
Reviewed-by: wangdi 
Reviewed-by: Andreas Dilger 
Signed-off-by: James Simmons 
---
 .../lustre/include/linux/libcfs/libcfs_private.h   |9 ---
 drivers/staging/lustre/lustre/include/lu_object.h  |   16 +
 drivers/staging/lustre/lustre/llite/llite_lib.c|   13 +++-
 drivers/staging/lustre/lustre/mdc/mdc_lib.c|   67 +---
 4 files changed, 70 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h 
b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
index 4daa382..d401ae1 100644
--- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
+++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
@@ -360,13 +360,4 @@ do {   
\
ptr += cfs_size_round(len);  \
 } while (0)
 
-#define LOGL0(var, len, ptr) \
-do {   \
-   if (!len)  \
-   break;\
-   memcpy((char *)ptr, (const char *)var, len);\
-   *((char *)(ptr) + len) = 0;  \
-   ptr += cfs_size_round(len + 1);  \
-} while (0)
-
 #endif
diff --git a/drivers/staging/lustre/lustre/include/lu_object.h 
b/drivers/staging/lustre/lustre/include/lu_object.h
index 25c12d8..6ab1782 100644
--- a/drivers/staging/lustre/lustre/include/lu_object.h
+++ b/drivers/staging/lustre/lustre/include/lu_object.h
@@ -1263,6 +1263,22 @@ struct lu_name {
 };
 
 /**
+ * Validate names (path components)
+ *
+ * To be valid \a name must be non-empty, '\0' terminated of length \a
+ * name_len, and not contain '/'. The maximum length of a name (before
+ * say -ENAMETOOLONG will be returned) is really controlled by llite
+ * and the server. We only check for something insane coming from bad
+ * integer handling here.
+ */
+static inline bool lu_name_is_valid_2(const char *name, size_t name_len)
+{
+   return name && name_len > 0 && name_len < INT_MAX &&
+  name[name_len] == '\0' && strlen(name) == name_len &&
+  !memchr(name, '/', name_len);
+}
+
+/**
  * Common buffer structure to be passed around for various xattr_{s,g}et()
  * methods.
  */
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c 
b/drivers/staging/lustre/lustre/llite/llite_lib.c
index 2f6e770..a3b4c97 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -2304,8 +2304,17 @@ struct md_op_data *ll_prep_md_op_data(struct md_op_data 
*op_data,
  const char *name, int namelen,
  int mode, __u32 opc, void *data)
 {
-   if (namelen > ll_i2sbi(i1)->ll_namelen)
-   return ERR_PTR(-ENAMETOOLONG);
+   if (!name) {
+   /* Do not reuse namelen for something else. */
+   if (namelen)
+   return ERR_PTR(-EINVAL);
+   } else {
+   if (namelen > ll_i2sbi(i1)->ll_namelen)
+   return ERR_PTR(-ENAMETOOLONG);
+
+   if (!lu_name_is_valid_2(name, namelen))
+   return ERR_PTR(-EINVAL);
+   }
 
if (!op_data)
op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
diff --git a/drivers/staging/lustre/lustre/mdc/mdc_lib.c 
b/drivers/staging/lustre/lustre/mdc/mdc_lib.c
index b532623..16c3571 100644
--- a/drivers/staging/lustre/lustre/mdc/mdc_lib.c
+++ b/drivers/staging/lustre/lustre/mdc/mdc_lib.c
@@ -87,6 +87,37 @@ void mdc_pack_body(struct ptlrpc_request *req, const struct 
lu_fid *fid,
}
 }
 
+/**
+ * Pack a name (path component) into a request
+ *
+ * \param[in] req  request
+ * \param[in] fieldrequest field (usually RMF_NAME)
+ * \param[in] name path component
+ * \param[in] name_len length of path component
+ *
+ * \a field must be present in \a req and of size \a name_len + 1.
+ *
+ * \a name must be '\0' terminated of length \a name_len and represent
+ * a single path component (not contain '/').
+ */
+static void mdc_pack_name(struct ptlrpc_request *req,
+ const struct req_msg_field *field,
+ const char *name, size_t name_len)
+{
+   size_t buf_size;
+   size_t cpy_len;
+   char *buf;
+
+   buf = req_capsule_client_get(>rq_pill, field);
+   buf_size = req_capsule_get_size(>rq_pill, field, RCL_CLIENT);
+
+   LASSERT(name 

[PATCH 54/80] staging: lustre: llite: set dir LOV xattr length variable

2016-08-16 Thread James Simmons
From: Hongchao Zhang 

the LOV xattr of directory could be either lov_user_md_v1
(size is 32) or lov_user_md_v3 (size is 48), then the actual
size of the LOV xattr should be return.

Signed-off-by: Hongchao Zhang 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5100
Reviewed-on: http://review.whamcloud.com/10453
Reviewed-by: James Simmons 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: jacques-Charles Lafoucriere 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/xattr.c |8 
 1 files changed, 0 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/xattr.c 
b/drivers/staging/lustre/lustre/llite/xattr.c
index aa0738b..146da6b 100644
--- a/drivers/staging/lustre/lustre/llite/xattr.c
+++ b/drivers/staging/lustre/lustre/llite/xattr.c
@@ -379,14 +379,6 @@ static int ll_xattr_get(const struct xattr_handler 
*handler,
if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
return -ENODATA;
 
-   if (size == 0 && S_ISDIR(inode->i_mode)) {
-   /* XXX directory EA is fix for now, optimize to save
-* RPC transfer
-*/
-   rc = sizeof(struct lov_user_md);
-   goto out;
-   }
-
lsm = ccc_inode_lsm_get(inode);
if (!lsm) {
if (S_ISDIR(inode->i_mode)) {
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 53/80] staging: lustre: obd: rename lsr_padding to lsr_valid

2016-08-16 Thread James Simmons
From: Niu Yawei 

Simple variable rename.

Signed-off-by: Niu Yawei 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4345
Reviewed-on: http://review.whamcloud.com/10223
Reviewed-by: Andreas Dilger 
Reviewed-by: Mike Pershin 
Reviewed-by: Alex Zhuravlev 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |2 +-
 drivers/staging/lustre/lustre/obdclass/llog_swab.c |1 +
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|8 
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 87eef4c..bbf0c8d 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -3036,7 +3036,7 @@ struct llog_setattr64_rec {
__u32   lsr_uid_h;
__u32   lsr_gid;
__u32   lsr_gid_h;
-   __u64   lsr_padding;
+   __u64   lsr_valid;
struct llog_rec_taillsr_tail;
 } __packed;
 
diff --git a/drivers/staging/lustre/lustre/obdclass/llog_swab.c 
b/drivers/staging/lustre/lustre/obdclass/llog_swab.c
index f7b9b19..0ec6361 100644
--- a/drivers/staging/lustre/lustre/obdclass/llog_swab.c
+++ b/drivers/staging/lustre/lustre/obdclass/llog_swab.c
@@ -224,6 +224,7 @@ void lustre_swab_llog_rec(struct llog_rec_hdr *rec)
__swab32s(>lsr_uid_h);
__swab32s(>lsr_gid);
__swab32s(>lsr_gid_h);
+   __swab64s(>lsr_valid);
tail = >lsr_tail;
break;
}
diff --git a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c 
b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
index 9d5d2c8..8dbaf32 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
@@ -3170,10 +3170,10 @@ void lustre_assert_wire_constants(void)
 (long long)(int)offsetof(struct llog_setattr64_rec, 
lsr_gid_h));
LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_gid_h) == 4, 
"found %lld\n",
 (long long)(int)sizeof(((struct llog_setattr64_rec 
*)0)->lsr_gid_h));
-   LASSERTF((int)offsetof(struct llog_setattr64_rec, lsr_padding) == 48, 
"found %lld\n",
-(long long)(int)offsetof(struct llog_setattr64_rec, 
lsr_padding));
-   LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_padding) == 
8, "found %lld\n",
-(long long)(int)sizeof(((struct llog_setattr64_rec 
*)0)->lsr_padding));
+   LASSERTF((int)offsetof(struct llog_setattr64_rec, lsr_valid) == 48, 
"found %lld\n",
+(long long)(int)offsetof(struct llog_setattr64_rec, 
lsr_valid));
+   LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_valid) == 8, 
"found %lld\n",
+(long long)(int)sizeof(((struct llog_setattr64_rec 
*)0)->lsr_valid));
LASSERTF((int)offsetof(struct llog_setattr64_rec, lsr_tail) == 56, 
"found %lld\n",
 (long long)(int)offsetof(struct llog_setattr64_rec, lsr_tail));
LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_tail) == 8, 
"found %lld\n",
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 43/80] staging: lustre: llite: fix inconsistencies of root squash feature

2016-08-16 Thread James Simmons
From: Gregoire Pichon 

Root squash exhibits inconsistent behaviour on a client when
enabled. If a file is not cached on the client, then root will get
a permission denied error when accessing the file. When
the file has recently been accessed by a regular user and is
still in cache, root will be able to access the file without error
because the permission check is only done by the client that
isn't aware of root squash.

While the only real security benefit from root squash is to deny
clients access to files owned by root itself, it also makes sense
to treat file access on the client in a consistent manner
regardless of whether the file is in cache or not.

This patch adds root squash settings to llite so that client is able
to apply root squashing when it is relevant.

Configuration of MDT root squash settings will automatically be
applied to llite config log as well.

Update cfs_str2num_check() routine by removing any modification
of the specified string parameter. Since string can come from ls_str
field of a lstr structure, this avoids inconsistent ls_len field.

Signed-off-by: Gregoire Pichon 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-1778
Reviewed-on: http://review.whamcloud.com/5700
Reviewed-by: Andreas Dilger 
Reviewed-by: Niu Yawei 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lnet/libcfs/libcfs_string.c |2 -
 .../staging/lustre/lustre/include/lprocfs_status.h |6 +
 drivers/staging/lustre/lustre/include/obd_class.h  |9 ++
 drivers/staging/lustre/lustre/llite/file.c |   44 ++
 .../staging/lustre/lustre/llite/llite_internal.h   |6 +
 drivers/staging/lustre/lustre/llite/llite_lib.c|   47 +++
 drivers/staging/lustre/lustre/llite/lproc_llite.c  |   68 ++
 .../lustre/lustre/obdclass/lprocfs_status.c|  140 
 8 files changed, 320 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/libcfs_string.c 
b/drivers/staging/lustre/lnet/libcfs/libcfs_string.c
index fc697cd..56a614d 100644
--- a/drivers/staging/lustre/lnet/libcfs/libcfs_string.c
+++ b/drivers/staging/lustre/lnet/libcfs/libcfs_string.c
@@ -229,8 +229,6 @@ cfs_str2num_check(char *str, int nob, unsigned *num,
char *endp, cache;
int rc;
 
-   str = cfs_trimwhite(str);
-
/**
 * kstrouint can only handle strings composed
 * of only numbers. We need to scan the string
diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h 
b/drivers/staging/lustre/lustre/include/lprocfs_status.h
index d68e60e..ff35e63 100644
--- a/drivers/staging/lustre/lustre/include/lprocfs_status.h
+++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h
@@ -681,6 +681,12 @@ static struct lustre_attr lustre_attr_##name = 
__ATTR(name, mode, show, store)
 
 extern const struct sysfs_ops lustre_sysfs_ops;
 
+struct root_squash_info;
+int lprocfs_wr_root_squash(const char *buffer, unsigned long count,
+  struct root_squash_info *squash, char *name);
+int lprocfs_wr_nosquash_nids(const char *buffer, unsigned long count,
+struct root_squash_info *squash, char *name);
+
 /* all quota proc functions */
 int lprocfs_quota_rd_bunit(char *page, char **start,
   loff_t off, int count,
diff --git a/drivers/staging/lustre/lustre/include/obd_class.h 
b/drivers/staging/lustre/lustre/include/obd_class.h
index a288995..e86961c 100644
--- a/drivers/staging/lustre/lustre/include/obd_class.h
+++ b/drivers/staging/lustre/lustre/include/obd_class.h
@@ -1759,4 +1759,13 @@ extern spinlock_t obd_types_lock;
 /* prng.c */
 #define ll_generate_random_uuid(uuid_out) cfs_get_random_bytes(uuid_out, 
sizeof(class_uuid_t))
 
+/* root squash info */
+struct rw_semaphore;
+struct root_squash_info {
+   uid_t   rsi_uid;
+   gid_t   rsi_gid;
+   struct list_headrsi_nosquash_nids;
+   struct rw_semaphore rsi_sem;
+};
+
 #endif /* __LINUX_OBD_CLASS_H */
diff --git a/drivers/staging/lustre/lustre/llite/file.c 
b/drivers/staging/lustre/lustre/llite/file.c
index 519db53..90a7170 100644
--- a/drivers/staging/lustre/lustre/llite/file.c
+++ b/drivers/staging/lustre/lustre/llite/file.c
@@ -41,6 +41,7 @@
 #include "../include/lustre_lite.h"
 #include 
 #include 
+#include 
 #include 
 #include "llite_internal.h"
 #include "../include/lustre/ll_fiemap.h"
@@ -3289,6 +3290,12 @@ struct posix_acl *ll_get_acl(struct inode *inode, int 
type)
 
 int ll_inode_permission(struct inode *inode, int mask)
 {
+   struct ll_sb_info *sbi;
+   struct root_squash_info *squash;
+   const struct cred *old_cred = NULL;
+   struct cred *cred = NULL;
+   bool squash_id = false;
+   cfs_cap_t cap;
int rc = 0;
 
if (mask & 

[PATCH 48/80] staging: lustre: llite: a few fixes about readdir of striped dir.

2016-08-16 Thread James Simmons
From: wang di 

Normally we know the value of op_mea1 when ll_readdir is called.
In the case of '.' or '..' op_mea1 is unknown so for that case
fetch the real parents FID.

Signed-off-by: wang di 
Signed-off-by: Li Xi 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4603
Reviewed-on: http://review.whamcloud.com/9191
Reviewed-by: John L. Hammond 
Reviewed-by: Andreas Dilger 
Reviewed-by: Fan Yong 
Reviewed-by: Li Xi 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c  |   27 +
 .../staging/lustre/lustre/llite/llite_internal.h   |1 +
 drivers/staging/lustre/lustre/llite/llite_nfs.c|   31 ++--
 3 files changed, 50 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 924b5df..3fed80d 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -622,6 +622,33 @@ static int ll_readdir(struct file *filp, struct 
dir_context *ctx)
goto out;
}
 
+   if (unlikely(op_data->op_mea1)) {
+   /*
+* This is only needed for striped dir to fill ..,
+* see lmv_read_page
+*/
+   if (file_dentry(filp)->d_parent &&
+   file_dentry(filp)->d_parent->d_inode) {
+   __u64 ibits = MDS_INODELOCK_UPDATE;
+   struct inode *parent;
+
+   parent = file_dentry(filp)->d_parent->d_inode;
+   if (ll_have_md_lock(parent, , LCK_MINMODE))
+   op_data->op_fid3 = *ll_inode2fid(parent);
+   }
+
+   /*
+* If it can not find in cache, do lookup .. on the master
+* object
+*/
+   if (fid_is_zero(_data->op_fid3)) {
+   rc = ll_dir_get_parent_fid(inode, _data->op_fid3);
+   if (rc) {
+   ll_finish_md_op_data(op_data);
+   return rc;
+   }
+   }
+   }
ctx->pos = pos;
rc = ll_dir_read(inode, , op_data, ctx);
pos = ctx->pos;
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index 3d7fa9a..43269aa 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -812,6 +812,7 @@ __u32 get_uuid2int(const char *name, int len);
 void get_uuid2fsid(const char *name, int len, __kernel_fsid_t *fsid);
 struct inode *search_inode_for_lustre(struct super_block *sb,
  const struct lu_fid *fid);
+int ll_dir_get_parent_fid(struct inode *dir, struct lu_fid *parent_fid);
 
 /* llite/symlink.c */
 extern const struct inode_operations ll_fast_symlink_inode_operations;
diff --git a/drivers/staging/lustre/lustre/llite/llite_nfs.c 
b/drivers/staging/lustre/lustre/llite/llite_nfs.c
index ab9d5cc..06a8199 100644
--- a/drivers/staging/lustre/lustre/llite/llite_nfs.c
+++ b/drivers/staging/lustre/lustre/llite/llite_nfs.c
@@ -302,14 +302,12 @@ static struct dentry *ll_fh_to_parent(struct super_block 
*sb, struct fid *fid,
return ll_iget_for_nfs(sb, _fid->lnf_parent, NULL);
 }
 
-static struct dentry *ll_get_parent(struct dentry *dchild)
+int ll_dir_get_parent_fid(struct inode *dir, struct lu_fid *parent_fid)
 {
struct ptlrpc_request *req = NULL;
-   struct inode  *dir = d_inode(dchild);
struct ll_sb_info *sbi;
-   struct dentry*result = NULL;
struct mdt_body   *body;
-   static chardotdot[] = "..";
+   static const char dotdot[] = "..";
struct md_op_data *op_data;
intrc;
int   lmmsize;
@@ -324,13 +322,13 @@ static struct dentry *ll_get_parent(struct dentry *dchild)
 
rc = ll_get_default_mdsize(sbi, );
if (rc != 0)
-   return ERR_PTR(rc);
+   return rc;
 
op_data = ll_prep_md_op_data(NULL, dir, NULL, dotdot,
 strlen(dotdot), lmmsize,
 LUSTRE_OPC_ANY, NULL);
if (IS_ERR(op_data))
-   return (void *)op_data;
+   return PTR_ERR(op_data);
 
rc = md_getattr_name(sbi->ll_md_exp, op_data, );
ll_finish_md_op_data(op_data);
@@ -338,7 +336,7 @@ static struct dentry *ll_get_parent(struct dentry *dchild)
CERROR("%s: failure inode "DFID" get parent: rc = %d\n",
   ll_get_fsname(dir->i_sb, NULL, 0),
   

[PATCH 45/80] staging: lustre: llite: Fix the deadlock in balance_dirty_pages()

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

If the page is already dirtied in ll_write_end() and kernel tries
to call balance_dirty_pages() to write back dirty pages in the same
thread, this is deadlock case if the page is already held by clio.

This can also fix the issue of LU-4873.

Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4977
Reviewed-on: http://review.whamcloud.com/10149
Reviewed-by: Bobi Jam 
Reviewed-by: Lai Siyao 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/rw26.c |   12 +---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/rw26.c 
b/drivers/staging/lustre/lustre/llite/rw26.c
index c14a1b6..8c8c100 100644
--- a/drivers/staging/lustre/lustre/llite/rw26.c
+++ b/drivers/staging/lustre/lustre/llite/rw26.c
@@ -506,9 +506,8 @@ static int ll_write_begin(struct file *file, struct 
address_space *mapping,
env = lcc->lcc_env;
io  = lcc->lcc_io;
 
-   if (likely(to == PAGE_SIZE)) /* LU-4873 */
-   /* To avoid deadlock, try to lock page first. */
-   vmpage = grab_cache_page_nowait(mapping, index);
+   /* To avoid deadlock, try to lock page first. */
+   vmpage = grab_cache_page_nowait(mapping, index);
if (unlikely(!vmpage || PageDirty(vmpage) || PageWriteback(vmpage))) {
struct vvp_io *vio = vvp_env_io(env);
struct cl_page_list *plist = >u.write.vui_queue;
@@ -617,6 +616,13 @@ static int ll_write_end(struct file *file, struct 
address_space *mapping,
LASSERT(from == 0);
vio->u.write.vui_to = from + copied;
 
+   /*
+* To address the deadlock in balance_dirty_pages() where
+* this dirty page may be written back in the same thread.
+*/
+   if (PageDirty(vmpage))
+   unplug = true;
+
/* We may have one full RPC, commit it soon */
if (plist->pl_nr >= PTLRPC_MAX_BRW_PAGES)
unplug = true;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [RFCv2][PATCH 2/5] arm: Implement ARCH_HAS_FORCE_CACHE

2016-08-16 Thread Laura Abbott

On 08/10/2016 04:22 PM, Russell King - ARM Linux wrote:

On Mon, Aug 08, 2016 at 10:49:34AM -0700, Laura Abbott wrote:

+/*
+ * Make an area consistent for devices.
+ * Note: Drivers should NOT use this function directly, as it will break
+ * platforms with CONFIG_DMABOUNCE.
+ * Use the driver DMA support - see dma-mapping.h (dma_sync_*)
+ */
+void __dma_page_cpu_to_dev(struct page *page, unsigned long off,
+   size_t size, enum dma_data_direction dir)
+{
+   phys_addr_t paddr;
+
+   dma_cache_maint_page(page, off, size, dir, dmac_map_area);
+
+   paddr = page_to_phys(page) + off;
+   if (dir == DMA_FROM_DEVICE) {
+   outer_inv_range(paddr, paddr + size);
+   } else {
+   outer_clean_range(paddr, paddr + size);
+   }
+   /* FIXME: non-speculating: flush on bidirectional mappings? */
+}
+
+void __dma_page_dev_to_cpu(struct page *page, unsigned long off,
+   size_t size, enum dma_data_direction dir)
+{
+   phys_addr_t paddr = page_to_phys(page) + off;
+
+   /* FIXME: non-speculating: not required */
+   /* in any case, don't bother invalidating if DMA to device */
+   if (dir != DMA_TO_DEVICE) {
+   outer_inv_range(paddr, paddr + size);
+
+   dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
+   }
+
+   /*
+* Mark the D-cache clean for these pages to avoid extra flushing.
+*/
+   if (dir != DMA_TO_DEVICE && size >= PAGE_SIZE) {
+   unsigned long pfn;
+   size_t left = size;
+
+   pfn = page_to_pfn(page) + off / PAGE_SIZE;
+   off %= PAGE_SIZE;
+   if (off) {
+   pfn++;
+   left -= PAGE_SIZE - off;
+   }
+   while (left >= PAGE_SIZE) {
+   page = pfn_to_page(pfn++);
+   set_bit(PG_dcache_clean, >flags);
+   left -= PAGE_SIZE;
+   }
+   }
+}


I _really_ don't want these exposed in any shape or form to driver
code.  I've seen too many hacks out there where people have gone
under the cover of the APIs they should be using, and headed straight
for the low-level functionality - adding function prototypes to get
at stuff they have no business doing.  Moving this here is just
asking for it to be abused.


+
+void kernel_force_cache_clean(struct page *page, size_t size)
+{
+   __dma_page_cpu_to_dev(page, 0, size, DMA_BIDIRECTIONAL);
+}
+
+void kernel_force_cache_invalidate(struct page *page, size_t size)
+{
+   __dma_page_dev_to_cpu(page, 0, size, DMA_BIDIRECTIONAL);
+}


Nothing in our implementation of these DMA operations guarantees
that those mean "clean" and "invalidate".  The DMA operations are
there so that CPUs can implement whatever they need at the map and
unmap times - and I've been very careful not to specify which cache
operations are involved.

For example, on older CPUs, __dma_page_dev_to_cpu() is almost
always a no-op.

If you want something that does something specific, then we need
something designed to do something specific.  Please don't re-use
what you think will fit.



I see what you are saying. What I really wanted was to re-use some of
the code that dma_cache_maint_page was doing for highmem handling
but it looks like I picked the wrong layer to make common. I'll give
this some thought.

Thanks,
Laura
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


RE: [PATCH v2 RESEND 2/4] Drivers: hv: balloon: account for gaps in hot add regions

2016-08-16 Thread Alex Ng (LIS)
> >>  static unsigned long handle_pg_range(unsigned long pg_start, @@ -
> 834,13
> >> +881,19 @@ static unsigned long process_hot_add(unsigned long
> pg_start,
> >>unsigned long rg_size)
> >>  {
> >>struct hv_hotadd_state *ha_region = NULL;
> >> +  int covered;
> >>
> >>if (pfn_cnt == 0)
> >>return 0;
> >>
> >> -  if (!dm_device.host_specified_ha_region)
> >> -  if (pfn_covered(pg_start, pfn_cnt))
> >> +  if (!dm_device.host_specified_ha_region) {
> >> +  covered = pfn_covered(pg_start, pfn_cnt);
> >> +  if (covered < 0)
> >> +  return 0;
> >
> > If the hot-add pages aren't covered by any region, then shouldn't it fall
> through instead of returning?
> > That way the new ha_region can be added to the list and we hot-add the
> > pages accordingly.
> 
> I was under an impression this is impossible:
> hot_add_req()/process_hot_add() will create a new region in this
> case. 'covered < 0' was added to handle one particular error: failure to
> allocate memory to record gap (struct hv_hotadd_gap) and I don't have a
> better idea how to handle this: if we can't remember the gap we'll crash
> later on onlining...
> 

You are correct. I misread your patch thinking "covered < 0" means the page 
range is not covered; when it is actually handling an error case.

> --
>   Vitaly
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 55/80] staging: lustre: mdt: add mbo_ prefix to members of struct mdt_body

2016-08-16 Thread James Simmons
From: John L. Hammond 

Rename each member of struct mdt_body, adding the prefix mbo_.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2675
Reviewed-on: http://review.whamcloud.com/10202
Reviewed-by: Bob Glossman 
Reviewed-by: Andreas Dilger 
Reviewed-by: Mike Pershin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   74 +++---
 drivers/staging/lustre/lustre/include/lustre_mdc.h |   14 +-
 drivers/staging/lustre/lustre/llite/dir.c  |   30 +-
 drivers/staging/lustre/lustre/llite/file.c |   20 +-
 drivers/staging/lustre/lustre/llite/lcommon_cl.c   |2 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c|  110 
 drivers/staging/lustre/lustre/llite/llite_nfs.c|6 +-
 drivers/staging/lustre/lustre/llite/namei.c|   44 ++--
 drivers/staging/lustre/lustre/llite/statahead.c|4 +-
 drivers/staging/lustre/lustre/llite/symlink.c  |6 +-
 drivers/staging/lustre/lustre/llite/xattr.c|   14 +-
 drivers/staging/lustre/lustre/llite/xattr_cache.c  |   12 +-
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |   38 ++--
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|   16 +-
 drivers/staging/lustre/lustre/mdc/mdc_lib.c|   62 +++---
 drivers/staging/lustre/lustre/mdc/mdc_locks.c  |   32 ++--
 drivers/staging/lustre/lustre/mdc/mdc_reint.c  |4 +-
 drivers/staging/lustre/lustre/mdc/mdc_request.c|   52 ++--
 .../staging/lustre/lustre/ptlrpc/pack_generic.c|   56 ++--
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|  268 ++--
 20 files changed, 432 insertions(+), 432 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index bbf0c8d..400ab3c 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2097,43 +2097,43 @@ enum md_transient_state {
 };
 
 struct mdt_body {
-   struct lu_fid  fid1;
-   struct lu_fid  fid2;
-   struct lustre_handle handle;
-   __u64 valid;
-   __u64 size;   /* Offset, in the case of MDS_READPAGE */
-   __s64 mtime;
-   __s64 atime;
-   __s64 ctime;
-   __u64 blocks; /* XID, in the case of MDS_READPAGE */
-   __u64 ioepoch;
-   __u64 t_state; /* transient file state defined in
-   * enum md_transient_state
-   * was "ino" until 2.4.0
-   */
-   __u32 fsuid;
-   __u32 fsgid;
-   __u32 capability;
-   __u32 mode;
-   __u32 uid;
-   __u32 gid;
-   __u32 flags; /* from vfs for pin/unpin, LUSTRE_BFLAG close */
-   __u32 rdev;
-   __u32 nlink; /* #bytes to read in the case of MDS_READPAGE */
-   __u32 unused2; /* was "generation" until 2.4.0 */
-   __u32 suppgid;
-   __u32 eadatasize;
-   __u32 aclsize;
-   __u32 max_mdsize;
-   __u32 max_cookiesize;
-   __u32 uid_h; /* high 32-bits of uid, for FUID */
-   __u32 gid_h; /* high 32-bits of gid, for FUID */
-   __u32 padding_5; /* also fix lustre_swab_mdt_body */
-   __u64 padding_6;
-   __u64 padding_7;
-   __u64 padding_8;
-   __u64 padding_9;
-   __u64 padding_10;
+   struct lu_fid mbo_fid1;
+   struct lu_fid mbo_fid2;
+   struct lustre_handle mbo_handle;
+   __u64   mbo_valid;
+   __u64   mbo_size;   /* Offset, in the case of MDS_READPAGE */
+   __s64   mbo_mtime;
+   __s64   mbo_atime;
+   __s64   mbo_ctime;
+   __u64   mbo_blocks; /* XID, in the case of MDS_READPAGE */
+   __u64   mbo_ioepoch;
+   __u64   mbo_t_state;/* transient file state defined in
+* enum md_transient_state
+* was "ino" until 2.4.0
+*/
+   __u32   mbo_fsuid;
+   __u32   mbo_fsgid;
+   __u32   mbo_capability;
+   __u32   mbo_mode;
+   __u32   mbo_uid;
+   __u32   mbo_gid;
+   __u32   mbo_flags;
+   __u32   mbo_rdev;
+   __u32   mbo_nlink;  /* #bytes to read in the case of MDS_READPAGE */
+   __u32   mbo_unused2;/* was "generation" until 2.4.0 */
+   __u32   mbo_suppgid;
+   __u32   mbo_eadatasize;
+   __u32   mbo_aclsize;
+   __u32   mbo_max_mdsize;
+   __u32   mbo_max_cookiesize;
+   __u32   mbo_uid_h;  /* high 32-bits of uid, for FUID */
+   __u32   mbo_gid_h;  /* high 32-bits of gid, for FUID */
+   __u32   mbo_padding_5;  /* also fix lustre_swab_mdt_body */
+   __u64   mbo_padding_6;
+   __u64   

[PATCH 61/80] staging: lustre: obdclass: compile issues with variable not being initialized

2016-08-16 Thread James Simmons
One of the versions of gcc I have refuses to build obd_mount.c due to
index not be initialized in function lmd_make_exclusion before it is
used.

Signed-off-by: James Simmons 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4629
Reviewed-on: http://review.whamcloud.com/10705
Reviewed-by: John L. Hammond 
Reviewed-by: Bob Glossman 
Reviewed-by: Dmitry Eremin 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/obdclass/obd_mount.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/obdclass/obd_mount.c 
b/drivers/staging/lustre/lustre/obdclass/obd_mount.c
index 33d6c42..595ea1f 100644
--- a/drivers/staging/lustre/lustre/obdclass/obd_mount.c
+++ b/drivers/staging/lustre/lustre/obdclass/obd_mount.c
@@ -730,7 +730,7 @@ int lustre_check_exclusion(struct super_block *sb, char 
*svname)
 static int lmd_make_exclusion(struct lustre_mount_data *lmd, const char *ptr)
 {
const char *s1 = ptr, *s2;
-   __u32 index, *exclude_list;
+   __u32 index = 0, *exclude_list;
int rc = 0, devmax;
 
/* The shortest an ost name can be is 8 chars: -OST.
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 63/80] staging: lustre: fid: do open-by-fid by default

2016-08-16 Thread James Simmons
From: Lai Siyao 

Currently client open-by-fid often packs name into the request,
but the name may be invalid, eg. NFS export, and even if it's
valid, it may cause inconsistency because this operation is done
on this fid, which is globally unique, but name not.

Since open-by-fid doesn't pack name, for striped dir we can't know
parent stripe fid on client, so we set parent fid the same as
child fid, and MDT has to find its parent fid from linkea (this is
already supported by MDT).

M_CHECK_STALE becomes obsolete.

Unset MDS_OPEN_FL_INTERNAL from open syscall flags, because these
flags are internally used, and should not be set from user space.

It's not necessary to store parent fid in lli_pfid, because MDT
can get it's parent fid from linkea, and now that DNE stripe
directory stores master inode fid in lli_pfid, stop storing parent
fid to avoid conflict.

Signed-off-by: Lai Siyao 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3544
Reviewed-on: http://review.whamcloud.com/7476
Reviewed-on: http://review.whamcloud.com/10692
Reviewed-by: Fan Yong 
Reviewed-by: Nathaniel Clark 
Reviewed-by: wangdi 
Reviewed-by: John L. Hammond 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |5 ++
 .../staging/lustre/lustre/include/lustre_lite.h|1 -
 drivers/staging/lustre/lustre/include/lustre_mds.h |3 -
 drivers/staging/lustre/lustre/llite/file.c |   71 +---
 .../staging/lustre/lustre/llite/llite_internal.h   |4 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c|   17 +
 drivers/staging/lustre/lustre/llite/llite_nfs.c|   14 +++-
 drivers/staging/lustre/lustre/llite/namei.c|1 +
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |   41 +--
 drivers/staging/lustre/lustre/mdc/mdc_internal.h   |1 -
 drivers/staging/lustre/lustre/mdc/mdc_lib.c|5 +-
 drivers/staging/lustre/lustre/mdc/mdc_locks.c  |   21 --
 .../lustre/lustre/obdclass/lprocfs_status.c|2 +-
 13 files changed, 71 insertions(+), 115 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 400ab3c..a9661c0 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2252,6 +2252,11 @@ void lustre_swab_mdt_rec_setattr(struct mdt_rec_setattr 
*sa);
  */
 #define MDS_OPEN_RELEASE   02ULL /* Open the file for HSM release 
*/
 
+#define MDS_OPEN_FL_INTERNAL (MDS_OPEN_HAS_EA | MDS_OPEN_HAS_OBJS |\
+ MDS_OPEN_OWNEROVERRIDE | MDS_OPEN_LOCK |  \
+ MDS_OPEN_BY_FID | MDS_OPEN_LEASE |\
+ MDS_OPEN_RELEASE)
+
 enum mds_op_bias {
MDS_CHECK_SPLIT = 1 << 0,
MDS_CROSS_REF   = 1 << 1,
diff --git a/drivers/staging/lustre/lustre/include/lustre_lite.h 
b/drivers/staging/lustre/lustre/include/lustre_lite.h
index b168977..a3d7573 100644
--- a/drivers/staging/lustre/lustre/include/lustre_lite.h
+++ b/drivers/staging/lustre/lustre/include/lustre_lite.h
@@ -42,7 +42,6 @@
 
 #include "obd_class.h"
 #include "lustre_net.h"
-#include "lustre_mds.h"
 #include "lustre_ha.h"
 
 /* 4UL * 1024 * 1024 */
diff --git a/drivers/staging/lustre/lustre/include/lustre_mds.h 
b/drivers/staging/lustre/lustre/include/lustre_mds.h
index 4104bd9..23a7e4f 100644
--- a/drivers/staging/lustre/lustre/include/lustre_mds.h
+++ b/drivers/staging/lustre/lustre/include/lustre_mds.h
@@ -58,9 +58,6 @@ struct mds_group_info {
 #define MDD_OBD_NAME "mdd_obd"
 #define MDD_OBD_UUID "mdd_obd_uuid"
 
-/* these are local flags, used only on the client, private */
-#define M_CHECK_STALE 02
-
 /** @} mds */
 
 #endif
diff --git a/drivers/staging/lustre/lustre/llite/file.c 
b/drivers/staging/lustre/lustre/llite/file.c
index 563cdf6..015b0ab 100644
--- a/drivers/staging/lustre/lustre/llite/file.c
+++ b/drivers/staging/lustre/lustre/llite/file.c
@@ -379,53 +379,35 @@ int ll_file_release(struct inode *inode, struct file 
*file)
return rc;
 }
 
-static int ll_intent_file_open(struct dentry *dentry, void *lmm,
-  int lmmsize, struct lookup_intent *itp)
+static int ll_intent_file_open(struct dentry *de, void *lmm, int lmmsize,
+  struct lookup_intent *itp)
 {
-   struct inode *inode = d_inode(dentry);
+   struct inode *inode = d_inode(de);
struct ll_sb_info *sbi = ll_i2sbi(inode);
-   struct dentry *parent = dentry->d_parent;
-   const char *name = dentry->d_name.name;
-   const int len = dentry->d_name.len;
+   struct 

[PATCH 68/80] staging: lustre: lmv: build master LMV EA dynamically build via readdir

2016-08-16 Thread James Simmons
From: Fan Yong 

When creating a striped directory, the master object saves the slave
objects (or shards) as internal sub-directories. The sub-directory's
name is composed of ${shard_FID}:${shard_idx}. With the name, we can
easily to know what the shard is and where it should be.

On the other hand, we need to store some information related with the
striped directory, such as magic, hash type, shards count, and so on.
That is the LMV EA (header). We do NOT store the FID of each shard in
the LMV EA. Instead, when we need the shards' FIDs (such as readdir()
on client-side), we can build the entrie LMV EA on the MDT (in RAM) by
iterating the sub-directory entries that are contained in the master
object of the striped directroy.

Above mechanism can simplify the striped directory create operation.
For very large striped directory, logging the FIDs array in the LMV
EA will be trouble. It also simplify the LFSCK for verifying striped
directory, because it reduces the inconsistency sources.

Another fixing is about the lmv_master_fid in master LMV EA header,
it is redundant information, and may become one of the inconsistency
sources. So replace it with two __u64 padding fields.

Signed-off-by: Fan Yong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5223
Reviewed-on: http://review.whamcloud.com/10751
Reviewed-by: Andreas Dilger 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |7 +--
 drivers/staging/lustre/lustre/include/lustre_lmv.h |   30 
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|4 --
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|   49 
 4 files changed, 52 insertions(+), 38 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 05fe359..17581ba 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2494,10 +2494,9 @@ struct lmv_mds_md_v1 {
 * for example migrating or dead.
 */
__u32 lmv_layout_version;   /* Used for directory restriping */
-   __u32 lmv_padding;
-   struct lu_fid lmv_master_fid;   /* The FID of the master object, which
-* is the namespace-visible dir FID
-*/
+   __u32 lmv_padding1;
+   __u64 lmv_padding2;
+   __u64 lmv_padding3;
char lmv_pool_name[LOV_MAXPOOLNAME];/* pool name */
struct lu_fid lmv_stripe_fids[0];   /* FIDs for each stripe */
 };
diff --git a/drivers/staging/lustre/lustre/include/lustre_lmv.h 
b/drivers/staging/lustre/lustre/include/lustre_lmv.h
index 1dd3e92..085e596 100644
--- a/drivers/staging/lustre/lustre/include/lustre_lmv.h
+++ b/drivers/staging/lustre/lustre/include/lustre_lmv.h
@@ -48,7 +48,6 @@ struct lmv_stripe_md {
__u32   lsm_md_layout_version;
__u32   lsm_md_default_count;
__u32   lsm_md_default_index;
-   struct lu_fid lsm_md_master_fid;
charlsm_md_pool_name[LOV_MAXPOOLNAME];
struct lmv_oinfo lsm_md_oinfo[0];
 };
@@ -90,23 +89,6 @@ static inline void lmv_free_memmd(struct lmv_stripe_md *lsm)
lmv_unpack_md(NULL, , NULL, 0);
 }
 
-static inline void lmv1_cpu_to_le(struct lmv_mds_md_v1 *lmv_dst,
- const struct lmv_mds_md_v1 *lmv_src)
-{
-   int i;
-
-   lmv_dst->lmv_magic = cpu_to_le32(lmv_src->lmv_magic);
-   lmv_dst->lmv_stripe_count = cpu_to_le32(lmv_src->lmv_stripe_count);
-   lmv_dst->lmv_master_mdt_index =
-   cpu_to_le32(lmv_src->lmv_master_mdt_index);
-   lmv_dst->lmv_hash_type = cpu_to_le32(lmv_src->lmv_hash_type);
-   lmv_dst->lmv_layout_version = cpu_to_le32(lmv_src->lmv_layout_version);
-
-   for (i = 0; i < lmv_src->lmv_stripe_count; i++)
-   fid_cpu_to_le(_dst->lmv_stripe_fids[i],
- _src->lmv_stripe_fids[i]);
-}
-
 static inline void lmv1_le_to_cpu(struct lmv_mds_md_v1 *lmv_dst,
  const struct lmv_mds_md_v1 *lmv_src)
 {
@@ -124,18 +106,6 @@ static inline void lmv1_le_to_cpu(struct lmv_mds_md_v1 
*lmv_dst,
  _src->lmv_stripe_fids[i]);
 }
 
-static inline void lmv_cpu_to_le(union lmv_mds_md *lmv_dst,
-const union lmv_mds_md *lmv_src)
-{
-   switch (lmv_src->lmv_magic) {
-   case LMV_MAGIC_V1:
-   lmv1_cpu_to_le(_dst->lmv_md_v1, _src->lmv_md_v1);
-   break;
-   default:
-   break;
-   }
-}
-
 static inline void lmv_le_to_cpu(union lmv_mds_md *lmv_dst,
   

[PATCH 72/80] staging: lustre: obd: validate open handle cookies

2016-08-16 Thread James Simmons
From: John L. Hammond 

Add a const void *h_owner member to struct portals_handle. Add a const
void *owner parameter to class_handle2object() which must be matched
by the h_owner member of the handle in addition to the cookie.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3233
Reviewed-on: http://review.whamcloud.com/6938
Reviewed-by: Andreas Dilger 
Reviewed-by: Fan Yong 
Reviewed-by: Mike Pershin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lustre/include/lustre_handles.h |3 ++-
 drivers/staging/lustre/lustre/ldlm/ldlm_lock.c |2 +-
 drivers/staging/lustre/lustre/obdclass/genops.c|2 +-
 .../lustre/lustre/obdclass/lustre_handles.c|4 ++--
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre_handles.h 
b/drivers/staging/lustre/lustre/include/lustre_handles.h
index 1a63a6b..bc1dd46 100644
--- a/drivers/staging/lustre/lustre/include/lustre_handles.h
+++ b/drivers/staging/lustre/lustre/include/lustre_handles.h
@@ -66,6 +66,7 @@ struct portals_handle_ops {
 struct portals_handle {
struct list_headh_link;
__u64   h_cookie;
+   const void  *h_owner;
struct portals_handle_ops   *h_ops;
 
/* newly added fields to handle the RCU issue. -jxiong */
@@ -83,7 +84,7 @@ struct portals_handle {
 void class_handle_hash(struct portals_handle *,
   struct portals_handle_ops *ops);
 void class_handle_unhash(struct portals_handle *);
-void *class_handle2object(__u64 cookie);
+void *class_handle2object(__u64 cookie, const void *owner);
 void class_handle_free_cb(struct rcu_head *rcu);
 int class_handle_init(void);
 void class_handle_cleanup(void);
diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c 
b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
index a91cdb4..7a34caf 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
@@ -542,7 +542,7 @@ struct ldlm_lock *__ldlm_handle2lock(const struct 
lustre_handle *handle,
 
LASSERT(handle);
 
-   lock = class_handle2object(handle->cookie);
+   lock = class_handle2object(handle->cookie, NULL);
if (!lock)
return NULL;
 
diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c 
b/drivers/staging/lustre/lustre/obdclass/genops.c
index be25434..a739eb1 100644
--- a/drivers/staging/lustre/lustre/obdclass/genops.c
+++ b/drivers/staging/lustre/lustre/obdclass/genops.c
@@ -618,7 +618,7 @@ struct obd_export *class_conn2export(struct lustre_handle 
*conn)
}
 
CDEBUG(D_INFO, "looking for export cookie %#llx\n", conn->cookie);
-   export = class_handle2object(conn->cookie);
+   export = class_handle2object(conn->cookie, NULL);
return export;
 }
 EXPORT_SYMBOL(class_conn2export);
diff --git a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c 
b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c
index 082f530..7ca68ae 100644
--- a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c
+++ b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c
@@ -130,7 +130,7 @@ void class_handle_unhash(struct portals_handle *h)
 }
 EXPORT_SYMBOL(class_handle_unhash);
 
-void *class_handle2object(__u64 cookie)
+void *class_handle2object(__u64 cookie, const void *owner)
 {
struct handle_bucket *bucket;
struct portals_handle *h;
@@ -145,7 +145,7 @@ void *class_handle2object(__u64 cookie)
 
rcu_read_lock();
list_for_each_entry_rcu(h, >head, h_link) {
-   if (h->h_cookie != cookie)
+   if (h->h_cookie != cookie || h->h_owner != owner)
continue;
 
spin_lock(>h_lock);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 59/80] staging: lustre: fld: add fld description documentation

2016-08-16 Thread James Simmons
From: Patrick Farrell 

Add subsystem description from Di Wang to header file.

Signed-off-by: Patrick Farrell 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5153
Reviewed-on: http://review.whamcloud.com/10631
Reviewed-by: wangdi 
Reviewed-by: John L. Hammond 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/fld/fld_internal.h |   19 +++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lustre/fld/fld_internal.h 
b/drivers/staging/lustre/lustre/fld/fld_internal.h
index f0efe5b..08eaec7 100644
--- a/drivers/staging/lustre/lustre/fld/fld_internal.h
+++ b/drivers/staging/lustre/lustre/fld/fld_internal.h
@@ -31,6 +31,25 @@
  *
  * lustre/fld/fld_internal.h
  *
+ * Subsystem Description:
+ * FLD is FID Location Database, which stores where (IE, on which MDT)
+ * FIDs are located.
+ * The database is basically a record file, each record consists of a FID
+ * sequence range, MDT/OST index, and flags. The FLD for the whole FS
+ * is only stored on the sequence controller(MDT0) right now, but each target
+ * also has its local FLD, which only stores the local sequence.
+ *
+ * The FLD subsystem usually has two tasks:
+ * 1. maintain the database, i.e. when the sequence controller allocates
+ * new sequence ranges to some nodes, it will call the FLD API to insert the
+ * location information  in FLDB.
+ *
+ * 2. Handle requests from other nodes, i.e. if client needs to know where
+ * the FID is located, if it can not find the information in the local cache,
+ * it will send a FLD lookup RPC to the FLD service, and the FLD service will
+ * look up the FLDB entry and return the location information to client.
+ *
+ *
  * Author: Yury Umanets 
  * Author: Tom WangDi 
  */
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 62/80] staging: lustre: obd: limit lu_object cache

2016-08-16 Thread James Simmons
From: Brian Behlendorf 

As the LU cache grows it can consume large enough chunks of
memory that ends up preventing buffers for other objects,
such as the OIs, from being cached and severely impacting
the performance for FID lookups. Limit the lu_object cache
to a maximum of lu_cache_nr objects.

NOTES:

* In order to be able to quickly determine the number of objects in
  the hash table the CFS_HASH_COUNTER flag is added.  This adds an
  atomic_inc/dec to the hash insert/remove paths but is not expected
  to have any measurable impact of performance.

Signed-off-by: Brian Behlendorf 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5164
Reviewed-on: http://review.whamcloud.com/10237
Reviewed-by: Andreas Dilger 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: Isaac Huang 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/obdclass/lu_object.c |   91 ++--
 1 files changed, 64 insertions(+), 27 deletions(-)

diff --git a/drivers/staging/lustre/lustre/obdclass/lu_object.c 
b/drivers/staging/lustre/lustre/obdclass/lu_object.c
index 0c00bf8..9d1c96b 100644
--- a/drivers/staging/lustre/lustre/obdclass/lu_object.c
+++ b/drivers/staging/lustre/lustre/obdclass/lu_object.c
@@ -55,6 +55,34 @@
 #include "../include/lu_ref.h"
 #include 
 
+enum {
+   LU_CACHE_PERCENT_MAX = 50,
+   LU_CACHE_PERCENT_DEFAULT = 20
+};
+
+#define LU_CACHE_NR_MAX_ADJUST 128
+#define LU_CACHE_NR_UNLIMITED  -1
+#define LU_CACHE_NR_DEFAULTLU_CACHE_NR_UNLIMITED
+#define LU_CACHE_NR_LDISKFS_LIMIT  LU_CACHE_NR_UNLIMITED
+#define LU_CACHE_NR_ZFS_LIMIT  256
+
+#define LU_SITE_BITS_MIN   12
+#define LU_SITE_BITS_MAX   24
+/**
+ * total 256 buckets, we don't want too many buckets because:
+ * - consume too much memory
+ * - avoid unbalanced LRU list
+ */
+#define LU_SITE_BKT_BITS   8
+
+static unsigned int lu_cache_percent = LU_CACHE_PERCENT_DEFAULT;
+module_param(lu_cache_percent, int, 0644);
+MODULE_PARM_DESC(lu_cache_percent, "Percentage of memory to be used as 
lu_object cache");
+
+static long lu_cache_nr = LU_CACHE_NR_DEFAULT;
+module_param(lu_cache_nr, long, 0644);
+MODULE_PARM_DESC(lu_cache_nr, "Maximum number of objects in lu_object cache");
+
 static void lu_object_free(const struct lu_env *env, struct lu_object *o);
 static __u32 ls_stats_read(struct lprocfs_stats *stats, int idx);
 
@@ -573,6 +601,27 @@ static struct lu_object *lu_object_find(const struct 
lu_env *env,
return lu_object_find_at(env, dev->ld_site->ls_top_dev, f, conf);
 }
 
+/*
+ * Limit the lu_object cache to a maximum of lu_cache_nr objects.  Because
+ * the calculation for the number of objects to reclaim is not covered by
+ * a lock the maximum number of objects is capped by LU_CACHE_MAX_ADJUST.
+ * This ensures that many concurrent threads will not accidentally purge
+ * the entire cache.
+ */
+static void lu_object_limit(const struct lu_env *env, struct lu_device *dev)
+{
+   __u64 size, nr;
+
+   if (lu_cache_nr == LU_CACHE_NR_UNLIMITED)
+   return;
+
+   size = cfs_hash_size_get(dev->ld_site->ls_obj_hash);
+   nr = (__u64)lu_cache_nr;
+   if (size > nr)
+   lu_site_purge(env, dev->ld_site,
+ min_t(__u64, size - nr, LU_CACHE_NR_MAX_ADJUST));
+}
+
 static struct lu_object *lu_object_new(const struct lu_env *env,
   struct lu_device *dev,
   const struct lu_fid *f,
@@ -590,6 +639,9 @@ static struct lu_object *lu_object_new(const struct lu_env 
*env,
cfs_hash_bd_get_and_lock(hs, (void *)f, , 1);
cfs_hash_bd_add_locked(hs, , >lo_header->loh_hash);
cfs_hash_bd_unlock(hs, , 1);
+
+   lu_object_limit(env, dev);
+
return o;
 }
 
@@ -656,6 +708,9 @@ static struct lu_object *lu_object_find_try(const struct 
lu_env *env,
if (likely(PTR_ERR(shadow) == -ENOENT)) {
cfs_hash_bd_add_locked(hs, , >lo_header->loh_hash);
cfs_hash_bd_unlock(hs, , 1);
+
+   lu_object_limit(env, dev);
+
return o;
}
 
@@ -805,20 +860,12 @@ void lu_site_print(const struct lu_env *env, struct 
lu_site *s, void *cookie,
 }
 EXPORT_SYMBOL(lu_site_print);
 
-enum {
-   LU_CACHE_PERCENT_MAX = 50,
-   LU_CACHE_PERCENT_DEFAULT = 20
-};
-
-static unsigned int lu_cache_percent = LU_CACHE_PERCENT_DEFAULT;
-module_param(lu_cache_percent, int, 0644);
-MODULE_PARM_DESC(lu_cache_percent, "Percentage of memory to be used as 
lu_object cache");
-
 /**
  * Return desired hash table order.
  */
-static int lu_htable_order(void)
+static int lu_htable_order(struct lu_device *top)
 {
+   unsigned long bits_max = LU_SITE_BITS_MAX;
unsigned long cache_size;
int 

[PATCH 75/80] staging: lustre: llite: set op_max_pages

2016-08-16 Thread James Simmons
From: wang di 

Cache the maximum allowed pages supported by the llite
layer. This value will be used in the mdc and lmv layer.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c   |1 +
 drivers/staging/lustre/lustre/llite/llite_nfs.c |1 +
 drivers/staging/lustre/lustre/llite/statahead.c |6 ++
 3 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 9c7fa8f..ed09015 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -649,6 +649,7 @@ static int ll_readdir(struct file *filp, struct dir_context 
*ctx)
}
}
}
+   op_data->op_max_pages = sbi->ll_md_brw_pages;
ctx->pos = pos;
rc = ll_dir_read(inode, , op_data, ctx);
pos = ctx->pos;
diff --git a/drivers/staging/lustre/lustre/llite/llite_nfs.c 
b/drivers/staging/lustre/lustre/llite/llite_nfs.c
index 2b65240..1e156dc 100644
--- a/drivers/staging/lustre/lustre/llite/llite_nfs.c
+++ b/drivers/staging/lustre/lustre/llite/llite_nfs.c
@@ -276,6 +276,7 @@ static int ll_get_name(struct dentry *dentry, char *name,
goto out;
}
 
+   op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
inode_lock(dir);
rc = ll_dir_read(dir, , op_data, );
inode_unlock(dir);
diff --git a/drivers/staging/lustre/lustre/llite/statahead.c 
b/drivers/staging/lustre/lustre/llite/statahead.c
index 46b8faf..454c33e 100644
--- a/drivers/staging/lustre/lustre/llite/statahead.c
+++ b/drivers/staging/lustre/lustre/llite/statahead.c
@@ -1052,6 +1052,8 @@ static int ll_statahead_thread(void *arg)
if (IS_ERR(op_data))
return PTR_ERR(op_data);
 
+   op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
+
if (sbi->ll_flags & LL_SBI_AGL_ENABLED)
ll_start_agl(parent, sai);
 
@@ -1355,6 +1357,10 @@ static int is_first_dirent(struct inode *dir, struct 
dentry *dentry)
 LUSTRE_OPC_ANY, dir);
if (IS_ERR(op_data))
return PTR_ERR(op_data);
+   /**
+* FIXME choose the start offset of the readdir
+*/
+   op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
 
ll_dir_chain_init();
page = ll_get_dir_page(dir, op_data, pos, );
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 77/80] staging: lustre: lnet: Correct position of lnet_ni_decref()

2016-08-16 Thread James Simmons
From: Doug Oucharek 

In fix http://review.whamcloud.com/#/c/19614/, the call
to lnet_ni_decref() should have followed the routines
which are using the NI.  This patch correct that.

Signed-off-by: Doug Oucharek 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-8022
Reviewed-on: http://review.whamcloud.com/21001
Reviewed-by: James Simmons 
Reviewed-by: John L. Hammond 
Reviewed-by: Dmitry Eremin 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c 
b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 9eb1db6..19c90fc 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -2526,9 +2526,9 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void 
*priv, int priv_nob)
 
  failed:
if (ni) {
-   lnet_ni_decref(ni);
rej.ibr_cp.ibcp_queue_depth = kiblnd_msg_queue_size(version, 
ni);
rej.ibr_cp.ibcp_max_frags = kiblnd_rdma_frags(version, ni);
+   lnet_ni_decref(ni);
}
 
rej.ibr_version = version;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: lustre: fix bare use of 'unsigned'

2016-08-16 Thread Anson Jacob
fix checkpatch.pl warning
Prefer 'unsigned int' to bare use of 'unsigned'

Signed-off-by: Anson Jacob 
---
 drivers/staging/lustre/lustre/include/cl_object.h | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/cl_object.h 
b/drivers/staging/lustre/lustre/include/cl_object.h
index 3cd4a25..db910ea 100644
--- a/drivers/staging/lustre/lustre/include/cl_object.h
+++ b/drivers/staging/lustre/lustre/include/cl_object.h
@@ -367,7 +367,7 @@ struct cl_object_operations {
 * cl_object_operations::coo_attr_get() is used.
 */
int (*coo_attr_set)(const struct lu_env *env, struct cl_object *obj,
-   const struct cl_attr *attr, unsigned valid);
+   const struct cl_attr *attr, unsigned int valid);
/**
 * Update object configuration. Called top-to-bottom to modify object
 * configuration.
@@ -757,7 +757,7 @@ struct cl_page {
/** Link to a queue, for debugging. */
struct lu_ref_link   cp_queue_ref;
/** Per-page flags from enum cl_page_flags. Protected by a VM lock. */
-   unsigned cp_flags;
+   unsigned int cp_flags;
/** Assigned if doing a sync_io */
struct cl_sync_io   *cp_sync_io;
 };
@@ -1316,7 +1316,7 @@ do {  
\
  * @{
  */
 struct cl_page_list {
-   unsigned pl_nr;
+   unsigned int pl_nr;
struct list_head   pl_pages;
struct task_struct  *pl_owner;
 };
@@ -1834,7 +1834,7 @@ struct cl_io {
/**
 * Number of pages owned by this IO. For invariant checking.
 */
-   unsigned ci_owned_nr;
+   unsigned int ci_owned_nr;
 };
 
 /** @} cl_io */
@@ -1992,11 +1992,11 @@ struct cl_req {
/** A list of pages being transferred */
struct list_headcrq_pages;
/** Number of pages in cl_req::crq_pages */
-   unsigned  crq_nrpages;
+   unsigned int  crq_nrpages;
/** An array of objects which pages are in ->crq_pages */
struct cl_req_obj*crq_o;
/** Number of elements in cl_req::crq_objs[] */
-   unsigned  crq_nrobjs;
+   unsigned int  crq_nrobjs;
struct list_headcrq_layers;
 };
 
@@ -2177,7 +2177,7 @@ void cl_object_attr_unlock(struct cl_object *o);
 int  cl_object_attr_get(const struct lu_env *env, struct cl_object *obj,
struct cl_attr *attr);
 int  cl_object_attr_set(const struct lu_env *env, struct cl_object *obj,
-   const struct cl_attr *attr, unsigned valid);
+   const struct cl_attr *attr, unsigned int valid);
 int  cl_object_glimpse(const struct lu_env *env, struct cl_object *obj,
   struct ost_lvb *lvb);
 int  cl_conf_set(const struct lu_env *env, struct cl_object *obj,
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 74/80] staging: lustre: obd: implement md_read_page

2016-08-16 Thread James Simmons
From: wang di 

This patch adds md_read_page which is a new more
flexiable api that will replace md_readpage.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/10761
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4906
Reviewed-by: John L. Hammond 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/obd.h   |   13 -
 drivers/staging/lustre/lustre/include/obd_class.h |   15 +++
 2 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/obd.h 
b/drivers/staging/lustre/lustre/include/obd.h
index e91f65a..92eebff 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
@@ -830,6 +830,15 @@ struct md_op_data {
struct lustre_handleop_lease_handle;
 };
 
+#define op_stripe_offset   op_ioepoch
+#define op_max_pages   op_valid
+
+struct md_callback {
+   int (*md_blocking_ast)(struct ldlm_lock *lock,
+  struct ldlm_lock_desc *desc,
+  void *data, int flag);
+};
+
 enum op_cli_flags {
CLI_SET_MEA = 1 << 0,
CLI_RM_ENTRY= 1 << 1,
@@ -1039,7 +1048,9 @@ struct md_ops {
struct ptlrpc_request **);
int (*readpage)(struct obd_export *, struct md_op_data *,
struct page **, struct ptlrpc_request **);
-
+   int (*read_page)(struct obd_export *, struct md_op_data *,
+struct md_callback *cb_op, __u64 hash_offset,
+struct page **ppage);
int (*unlink)(struct obd_export *, struct md_op_data *,
  struct ptlrpc_request **);
 
diff --git a/drivers/staging/lustre/lustre/include/obd_class.h 
b/drivers/staging/lustre/lustre/include/obd_class.h
index 69b628b..daca5a0 100644
--- a/drivers/staging/lustre/lustre/include/obd_class.h
+++ b/drivers/staging/lustre/lustre/include/obd_class.h
@@ -1535,6 +1535,21 @@ static inline int md_readpage(struct obd_export *exp, 
struct md_op_data *opdata,
return rc;
 }
 
+static inline int md_read_page(struct obd_export *exp,
+  struct md_op_data *op_data,
+  struct md_callback *cb_op,
+  __u64  hash_offset,
+  struct page **ppage)
+{
+   int rc;
+
+   EXP_CHECK_MD_OP(exp, read_page);
+   EXP_MD_COUNTER_INCREMENT(exp, read_page);
+   rc = MDP(exp->exp_obd, read_page)(exp, op_data, cb_op, hash_offset,
+ ppage);
+   return rc;
+}
+
 static inline int md_unlink(struct obd_export *exp, struct md_op_data *op_data,
struct ptlrpc_request **request)
 {
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 73/80] staging: lustre: lmv: build error with gcc 4.7.0 20110509

2016-08-16 Thread James Simmons
From: Dmitry Eremin 

Fixed comparison between signed and unsigned indexes.

Signed-off-by: Dmitry Eremin 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3775
Reviewed-on: http://review.whamcloud.com/7382
Reviewed-by: John L. Hammond 
Reviewed-by: James Simmons 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c |   34 ++
 1 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index b8275e1..3e41f49 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -130,12 +130,12 @@ static void lmv_activate_target(struct lmv_obd *lmv,
  *  -ENOTCONN: The UUID is found, but the target connection is bad (!)
  *  -EBADF   : The UUID is found, but the OBD of the wrong type (!)
  */
-static int lmv_set_mdc_active(struct lmv_obd *lmv, struct obd_uuid *uuid,
+static int lmv_set_mdc_active(struct lmv_obd *lmv, const struct obd_uuid *uuid,
  int activate)
 {
struct lmv_tgt_desc*uninitialized_var(tgt);
struct obd_device  *obd;
-   int  i;
+   u32  i;
int  rc = 0;
 
CDEBUG(D_INFO, "Searching in lmv %p for uuid %s (activate=%d)\n",
@@ -307,7 +307,7 @@ static int lmv_connect(const struct lu_env *env,
 static void lmv_set_timeouts(struct obd_device *obd)
 {
struct lmv_obd  *lmv;
-   int i;
+   u32 i;
 
lmv = >u.lmv;
if (lmv->server_timeout == 0)
@@ -333,7 +333,7 @@ static int lmv_init_ea_size(struct obd_export *exp, int 
easize,
 {
struct obd_device   *obd = exp->exp_obd;
struct lmv_obd  *lmv = >u.lmv;
-   int   i;
+   u32 i;
int   rc = 0;
int   change = 0;
 
@@ -578,7 +578,7 @@ int lmv_check_connect(struct obd_device *obd)
 {
struct lmv_obd   *lmv = >u.lmv;
struct lmv_tgt_desc  *tgt;
-   inti;
+   u32 i;
intrc;
inteasize;
 
@@ -693,7 +693,7 @@ static int lmv_disconnect(struct obd_export *exp)
struct obd_device *obd = class_exp2obd(exp);
struct lmv_obd  *lmv = >u.lmv;
int rc;
-   int i;
+   u32 i;
 
if (!lmv->tgts)
goto out_local;
@@ -822,7 +822,7 @@ 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;
+   u32 i, nr = 0;
struct lmv_tgt_desc*curr_tgt;
 
/* count how many requests must be sent to the given target */
@@ -963,10 +963,10 @@ static int lmv_iocontrol(unsigned int cmd, struct 
obd_export *exp,
struct obd_device*obddev = class_exp2obd(exp);
struct lmv_obd   *lmv = >u.lmv;
struct lmv_tgt_desc *tgt = NULL;
-   inti = 0;
+   u32 i = 0;
intrc = 0;
intset = 0;
-   intcount = lmv->desc.ld_tgt_count;
+   u32 count = lmv->desc.ld_tgt_count;
 
if (count == 0)
return -ENOTTY;
@@ -1444,7 +1444,7 @@ static int lmv_statfs(const struct lu_env *env, struct 
obd_export *exp,
struct lmv_obd  *lmv = >u.lmv;
struct obd_statfs *temp;
int rc = 0;
-   int i;
+   u32 i;
 
rc = lmv_check_connect(obd);
if (rc)
@@ -1586,7 +1586,7 @@ static int lmv_null_inode(struct obd_export *exp, const 
struct lu_fid *fid)
 {
struct obd_device   *obd = exp->exp_obd;
struct lmv_obd  *lmv = >u.lmv;
-   int   i;
+   u32 i;
int   rc;
 
rc = lmv_check_connect(obd);
@@ -1615,7 +1615,7 @@ static int lmv_find_cbdata(struct obd_export *exp, const 
struct lu_fid *fid,
struct obd_device   *obd = exp->exp_obd;
struct lmv_obd  *lmv = >u.lmv;
int tgt;
-   int   i;
+   u32 i;
int   rc;
 
rc = lmv_check_connect(obd);
@@ -2923,7 +2923,7 @@ static int lmv_cancel_unused(struct obd_export *exp, 
const struct lu_fid *fid,
struct lmv_obd*lmv = >u.lmv;
int   rc = 0;
int   err;
-   int   i;
+   u32 i;
 
LASSERT(fid);
 
@@ -2966,7 +2966,7 @@ static enum ldlm_mode lmv_lock_match(struct obd_export 
*exp, __u64 flags,
struct lmv_obd*lmv = >u.lmv;
enum ldlm_moderc;
int tgt;
-   int   

[PATCH 76/80] staging: lustre: lnet: Do not drop message when shutting down LNet

2016-08-16 Thread James Simmons
From: Doug Oucharek 

There is a case in lnet_parse() where we discover that LNet
is shutting down but we continue to use the NI when we drop the
message and end up calling ko2iblnd_check_send_locked() which tries to
allocate from the Tx pool which has been cleaned up already.
This triggers a NULL pointer dereference.

This fix just returns from lnet_parse() when we disover LNet is
shutting down.

Signed-off-by: Doug Oucharek 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-8106
Reviewed-on: http://review.whamcloud.com/19993
Reviewed-by: James Simmons 
Reviewed-by: Liang Zhen 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lnet/lnet/lib-move.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c 
b/drivers/staging/lustre/lnet/lnet/lib-move.c
index 6a3f2e1..5598fa8 100644
--- a/drivers/staging/lustre/lnet/lnet/lib-move.c
+++ b/drivers/staging/lustre/lnet/lnet/lib-move.c
@@ -2002,6 +2002,9 @@ lnet_parse(lnet_ni_t *ni, lnet_hdr_t *hdr, lnet_nid_t 
from_nid,
   libcfs_nid2str(from_nid), libcfs_nid2str(src_nid),
   lnet_msgtyp2str(type), rc);
lnet_msg_free(msg);
+   if (rc == -ESHUTDOWN)
+   /* We are shutting down. Don't do anything more */
+   return 0;
goto drop;
}
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 70/80] staging: lustre: include: fix one off errors in lustre_id.h

2016-08-16 Thread James Simmons
During inspection of another patch Dan Carpenter noticed some
one off errors in lustre_id.h. Fix the condition test for
OBIF_MAX_OID.

Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 17581ba..9545451 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -659,7 +659,7 @@ static inline void ostid_set_id(struct ost_id *oi, __u64 
oid)
oi->oi_fid.f_oid = oid;
oi->oi_fid.f_ver = oid >> 48;
} else {
-   if (oid > OBIF_MAX_OID) {
+   if (oid >= OBIF_MAX_OID) {
CERROR("Bad %llu to set " DOSTID "\n", oid, POSTID(oi));
return;
}
@@ -684,7 +684,7 @@ static inline int fid_set_id(struct lu_fid *fid, __u64 oid)
fid->f_oid = oid;
fid->f_ver = oid >> 48;
} else {
-   if (oid > OBIF_MAX_OID) {
+   if (oid >= OBIF_MAX_OID) {
CERROR("Too large OID %#llx to set REG "DFID"\n",
   (unsigned long long)oid, PFID(fid));
return -EBADF;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/9 RESEND] staging: most: hdm-usb: remove unused macro HW_RESYNC

2016-08-16 Thread Christian Gromm
This patch removes the macro HW_RESYNC that is not used anymore.

Signed-off-by: Andrey Shvetsov 
Signed-off-by: Christian Gromm 
---
 drivers/staging/most/hdm-usb/hdm_usb.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c 
b/drivers/staging/most/hdm-usb/hdm_usb.c
index aeae071..d2139d1 100644
--- a/drivers/staging/most/hdm-usb/hdm_usb.c
+++ b/drivers/staging/most/hdm-usb/hdm_usb.c
@@ -44,7 +44,6 @@
 #define USB_VENDOR_ID_SMSC 0x0424  /* VID: SMSC */
 #define USB_DEV_ID_BRDG0xC001  /* PID: USB Bridge */
 #define USB_DEV_ID_INIC0xCF18  /* PID: USB INIC */
-#define HW_RESYNC  0x
 /* DRCI Addresses */
 #define DRCI_REG_NI_STATE  0x0100
 #define DRCI_REG_PACKET_BW 0x0101
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 2/8] staging: most: hdm-usb: assign spinlock to local variable

2016-08-16 Thread Christian Gromm
This patch assigns the spinlock of struct mdev to local spinlock_t
variable to get rid of all the ugly dereferencing.

Signed-off-by: Andrey Shvetsov 
Signed-off-by: Christian Gromm 
---
 drivers/staging/most/hdm-usb/hdm_usb.c | 31 +++
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c 
b/drivers/staging/most/hdm-usb/hdm_usb.c
index 8d8c72c..4156a30 100644
--- a/drivers/staging/most/hdm-usb/hdm_usb.c
+++ b/drivers/staging/most/hdm-usb/hdm_usb.c
@@ -206,14 +206,15 @@ static void free_anchored_buffers(struct most_dev *mdev, 
unsigned int channel,
 {
struct mbo *mbo;
struct buf_anchor *anchor, *tmp;
+   spinlock_t *lock = mdev->anchor_list_lock + channel; /* temp. lock */
unsigned long flags;
 
-   spin_lock_irqsave(>anchor_list_lock[channel], flags);
+   spin_lock_irqsave(lock, flags);
list_for_each_entry_safe(anchor, tmp, >anchor_list[channel],
 list) {
struct urb *urb = anchor->urb;
 
-   spin_unlock_irqrestore(>anchor_list_lock[channel], flags);
+   spin_unlock_irqrestore(lock, flags);
if (likely(urb)) {
mbo = urb->context;
if (!irqs_disabled()) {
@@ -229,11 +230,11 @@ static void free_anchored_buffers(struct most_dev *mdev, 
unsigned int channel,
}
usb_free_urb(urb);
}
-   spin_lock_irqsave(>anchor_list_lock[channel], flags);
+   spin_lock_irqsave(lock, flags);
list_del(>list);
kfree(anchor);
}
-   spin_unlock_irqrestore(>anchor_list_lock[channel], flags);
+   spin_unlock_irqrestore(lock, flags);
 }
 
 /**
@@ -397,12 +398,14 @@ static void hdm_write_completion(struct urb *urb)
struct device *dev;
unsigned int channel;
unsigned long flags;
+   spinlock_t *lock; /* temp. lock */
 
mbo = urb->context;
anchor = mbo->priv;
mdev = to_mdev(mbo->ifp);
channel = mbo->hdm_channel_id;
dev = >usb_device->dev;
+   lock = mdev->anchor_list_lock + channel;
 
if ((urb->status == -ENOENT) || (urb->status == -ECONNRESET) ||
(!mdev->is_channel_healthy[channel])) {
@@ -433,9 +436,9 @@ static void hdm_write_completion(struct urb *urb)
mbo->processed_length = urb->actual_length;
}
 
-   spin_lock_irqsave(>anchor_list_lock[channel], flags);
+   spin_lock_irqsave(lock, flags);
list_del(>list);
-   spin_unlock_irqrestore(>anchor_list_lock[channel], flags);
+   spin_unlock_irqrestore(lock, flags);
kfree(anchor);
 
if (likely(mbo->complete))
@@ -559,12 +562,14 @@ static void hdm_read_completion(struct urb *urb)
struct device *dev;
unsigned long flags;
unsigned int channel;
+   spinlock_t *lock; /* temp. lock */
 
mbo = urb->context;
anchor = mbo->priv;
mdev = to_mdev(mbo->ifp);
channel = mbo->hdm_channel_id;
dev = >usb_device->dev;
+   lock = mdev->anchor_list_lock + channel;
 
if ((urb->status == -ENOENT) || (urb->status == -ECONNRESET) ||
(!mdev->is_channel_healthy[channel])) {
@@ -601,9 +606,9 @@ static void hdm_read_completion(struct urb *urb)
mbo->status = MBO_E_INVAL;
}
}
-   spin_lock_irqsave(>anchor_list_lock[channel], flags);
+   spin_lock_irqsave(lock, flags);
list_del(>list);
-   spin_unlock_irqrestore(>anchor_list_lock[channel], flags);
+   spin_unlock_irqrestore(lock, flags);
kfree(anchor);
 
if (likely(mbo->complete))
@@ -638,6 +643,7 @@ static int hdm_enqueue(struct most_interface *iface, int 
channel,
unsigned long flags;
unsigned long length;
void *virt_address;
+   spinlock_t *lock; /* temp. lock */
 
if (unlikely(!iface || !mbo))
return -EIO;
@@ -697,9 +703,10 @@ static int hdm_enqueue(struct most_interface *iface, int 
channel,
}
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
-   spin_lock_irqsave(>anchor_list_lock[channel], flags);
+   lock = mdev->anchor_list_lock + channel;
+   spin_lock_irqsave(lock, flags);
list_add_tail(>list, >anchor_list[channel]);
-   spin_unlock_irqrestore(>anchor_list_lock[channel], flags);
+   spin_unlock_irqrestore(lock, flags);
 
retval = usb_submit_urb(urb, GFP_KERNEL);
if (retval) {
@@ -709,9 +716,9 @@ static int hdm_enqueue(struct most_interface *iface, int 
channel,
return 0;
 
 _error_1:
-   spin_lock_irqsave(>anchor_list_lock[channel], flags);
+   spin_lock_irqsave(lock, flags);
list_del(>list);
-   spin_unlock_irqrestore(>anchor_list_lock[channel], flags);
+   

[PATCH 4/8] staging: most: hdm-usb: remove completion object

2016-08-16 Thread Christian Gromm
Waiting for the urb_compl object to complete evaluates always as false.
This patch removes this unnecessary completion object.

Signed-off-by: Andrey Shvetsov 
Signed-off-by: Christian Gromm 
---
 drivers/staging/most/hdm-usb/hdm_usb.c | 11 +--
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c 
b/drivers/staging/most/hdm-usb/hdm_usb.c
index 26b5c1b..29e98dc 100644
--- a/drivers/staging/most/hdm-usb/hdm_usb.c
+++ b/drivers/staging/most/hdm-usb/hdm_usb.c
@@ -72,7 +72,6 @@
 struct buf_anchor {
struct urb *urb;
struct list_head list;
-   struct completion urb_compl;
 };
 
 /**
@@ -217,12 +216,7 @@ static void free_anchored_buffers(struct most_dev *mdev, 
unsigned int channel,
spin_unlock_irqrestore(lock, flags);
if (likely(urb)) {
mbo = urb->context;
-   if (!irqs_disabled()) {
-   usb_kill_urb(urb);
-   } else {
-   usb_unlink_urb(urb);
-   wait_for_completion(>urb_compl);
-   }
+   usb_kill_urb(urb);
if ((mbo) && (mbo->complete)) {
mbo->status = status;
mbo->processed_length = 0;
@@ -416,7 +410,6 @@ static void hdm_write_completion(struct urb *urb)
if ((urb->status == -ENOENT) || (urb->status == -ECONNRESET) ||
(!mdev->is_channel_healthy[channel])) {
spin_unlock_irqrestore(lock, flags);
-   complete(>urb_compl);
return;
}
 
@@ -582,7 +575,6 @@ static void hdm_read_completion(struct urb *urb)
if ((urb->status == -ENOENT) || (urb->status == -ECONNRESET) ||
(!mdev->is_channel_healthy[channel])) {
spin_unlock_irqrestore(lock, flags);
-   complete(>urb_compl);
return;
}
 
@@ -678,7 +670,6 @@ static int hdm_enqueue(struct most_interface *iface, int 
channel,
}
 
anchor->urb = urb;
-   init_completion(>urb_compl);
mbo->priv = anchor;
 
if ((mdev->padding_active[channel]) &&
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 7/8] staging: most: hdm-usb: remove unnecessary status assignment

2016-08-16 Thread Christian Gromm
The USB completion callbacks set the status field of an MBO object before
scheduling the clear_work. This patch removes this redundant assignment as
the work_struct does the same for all MBOs.

Signed-off-by: Andrey Shvetsov 
Signed-off-by: Christian Gromm 
---
 drivers/staging/most/hdm-usb/hdm_usb.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c 
b/drivers/staging/most/hdm-usb/hdm_usb.c
index 453b641..f44f27e 100644
--- a/drivers/staging/most/hdm-usb/hdm_usb.c
+++ b/drivers/staging/most/hdm-usb/hdm_usb.c
@@ -412,7 +412,6 @@ static void hdm_write_completion(struct urb *urb)
dev_warn(dev, "Broken OUT pipe detected\n");
mdev->is_channel_healthy[channel] = false;
spin_unlock_irqrestore(lock, flags);
-   mbo->status = MBO_E_INVAL;
mdev->clear_work[channel].pipe = urb->pipe;
schedule_work(>clear_work[channel].ws);
return;
@@ -570,7 +569,6 @@ static void hdm_read_completion(struct urb *urb)
dev_warn(dev, "Broken IN pipe detected\n");
mdev->is_channel_healthy[channel] = false;
spin_unlock_irqrestore(lock, flags);
-   mbo->status = MBO_E_INVAL;
mdev->clear_work[channel].pipe = urb->pipe;
schedule_work(>clear_work[channel].ws);
return;
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/8] staging: most: hdm-usb: fix race between enqueue and most_stop_enqueue

2016-08-16 Thread Christian Gromm
The "broken in pipe" handler of the USB-HDM calls most_stop_enqueue() to
stop the MBO traffic before returning all MBOs back to the Mostcore.  As
the enqueue() call from the Mostcore may run in parallel with the
most_stop_enqueue(), the HDM may run into the inconsistent state and
crash the kernel.

This patch synchronizes enqueue(), most_stop_enqueue() and
most_resume_enqueue() with a mutex, hence avoiding the race condition.

Signed-off-by: Andrey Shvetsov 
Signed-off-by: Christian Gromm 
---
 drivers/staging/most/hdm-usb/hdm_usb.c |  3 +-
 drivers/staging/most/mostcore/core.c   | 53 --
 2 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c 
b/drivers/staging/most/hdm-usb/hdm_usb.c
index 7f00aaf..8d8c72c 100644
--- a/drivers/staging/most/hdm-usb/hdm_usb.c
+++ b/drivers/staging/most/hdm-usb/hdm_usb.c
@@ -415,7 +415,6 @@ static void hdm_write_completion(struct urb *urb)
switch (urb->status) {
case -EPIPE:
dev_warn(dev, "Broken OUT pipe detected\n");
-   most_stop_enqueue(>iface, channel);
mdev->is_channel_healthy[channel] = false;
mbo->status = MBO_E_INVAL;
mdev->clear_work[channel].pipe = urb->pipe;
@@ -578,7 +577,6 @@ static void hdm_read_completion(struct urb *urb)
switch (urb->status) {
case -EPIPE:
dev_warn(dev, "Broken IN pipe detected\n");
-   most_stop_enqueue(>iface, channel);
mdev->is_channel_healthy[channel] = false;
mbo->status = MBO_E_INVAL;
mdev->clear_work[channel].pipe = urb->pipe;
@@ -928,6 +926,7 @@ static void wq_clear_halt(struct work_struct *wq_obj)
int pipe = clear_work->pipe;
 
mutex_lock(>io_mutex);
+   most_stop_enqueue(>iface, channel);
free_anchored_buffers(mdev, channel, MBO_E_INVAL);
if (usb_clear_halt(mdev->usb_device, pipe))
dev_warn(>usb_device->dev, "Failed to reset endpoint.\n");
diff --git a/drivers/staging/most/mostcore/core.c 
b/drivers/staging/most/mostcore/core.c
index b03cdc9..db0606ca 100644
--- a/drivers/staging/most/mostcore/core.c
+++ b/drivers/staging/most/mostcore/core.c
@@ -51,6 +51,7 @@ struct most_c_obj {
u16 channel_id;
bool is_poisoned;
struct mutex start_mutex;
+   struct mutex nq_mutex; /* nq thread synchronization */
int is_starving;
struct most_interface *iface;
struct most_inst_obj *inst;
@@ -1131,18 +1132,18 @@ static inline void trash_mbo(struct mbo *mbo)
spin_unlock_irqrestore(>fifo_lock, flags);
 }
 
-static struct mbo *get_hdm_mbo(struct most_c_obj *c)
+static bool hdm_mbo_ready(struct most_c_obj *c)
 {
-   unsigned long flags;
-   struct mbo *mbo;
+   bool empty;
 
-   spin_lock_irqsave(>fifo_lock, flags);
-   if (c->enqueue_halt || list_empty(>halt_fifo))
-   mbo = NULL;
-   else
-   mbo = list_pop_mbo(>halt_fifo);
-   spin_unlock_irqrestore(>fifo_lock, flags);
-   return mbo;
+   if (c->enqueue_halt)
+   return false;
+
+   spin_lock_irq(>fifo_lock);
+   empty = list_empty(>halt_fifo);
+   spin_unlock_irq(>fifo_lock);
+
+   return !empty;
 }
 
 static void nq_hdm_mbo(struct mbo *mbo)
@@ -1160,20 +1161,32 @@ static int hdm_enqueue_thread(void *data)
 {
struct most_c_obj *c = data;
struct mbo *mbo;
+   int ret;
typeof(c->iface->enqueue) enqueue = c->iface->enqueue;
 
while (likely(!kthread_should_stop())) {
wait_event_interruptible(c->hdm_fifo_wq,
-(mbo = get_hdm_mbo(c)) ||
+hdm_mbo_ready(c) ||
 kthread_should_stop());
 
-   if (unlikely(!mbo))
+   mutex_lock(>nq_mutex);
+   spin_lock_irq(>fifo_lock);
+   if (unlikely(c->enqueue_halt || list_empty(>halt_fifo))) {
+   spin_unlock_irq(>fifo_lock);
+   mutex_unlock(>nq_mutex);
continue;
+   }
+
+   mbo = list_pop_mbo(>halt_fifo);
+   spin_unlock_irq(>fifo_lock);
 
if (c->cfg.direction == MOST_CH_RX)
mbo->buffer_length = c->cfg.buffer_size;
 
-   if (unlikely(enqueue(mbo->ifp, mbo->hdm_channel_id, mbo))) {
+   ret = enqueue(mbo->ifp, mbo->hdm_channel_id, mbo);
+   mutex_unlock(>nq_mutex);
+
+   if (unlikely(ret)) {
pr_err("hdm enqueue failed\n");
nq_hdm_mbo(mbo);
c->hdm_enqueue_task = NULL;
@@ -1759,6 

[PATCH 41/80] staging: lustre: lmv: separate master object with master stripe

2016-08-16 Thread James Simmons
From: wang di 

Separate master stripe with master object, so
1. stripeEA only exists on master object.
2. sub-stripe object will be inserted into master object
as sub-directory, and it can get the master object by "..".

By this, it will remove those specilities for stripe0 in
LMV and LOD. And also simplify LFSCK, i.e. consistency check
would be easier.

When then master object becomes an orphan, we should
mark all of its sub-stripes as dead object as well,
otherwise client might still be able to create files
under these stripes.

A few fixes for striped directory layout lock:

 1. stripe 0 should be locked as EX, same as other stripes.
 2. Acquire the layout for directory, when it is being unliked.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4690
Reviewed-on: http://review.whamcloud.com/9511
Reviewed-by: Andreas Dilger 
Reviewed-by: John L. Hammond 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   64 +-
 .../lustre/lustre/include/lustre/lustre_user.h |3 +-
 drivers/staging/lustre/lustre/include/lustre_lmv.h |   25 +-
 drivers/staging/lustre/lustre/include/obd.h|4 +-
 drivers/staging/lustre/lustre/include/obd_class.h  |5 +-
 drivers/staging/lustre/lustre/llite/dir.c  |   31 ++-
 drivers/staging/lustre/lustre/llite/llite_lib.c|   89 ++--
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |   25 +-
 drivers/staging/lustre/lustre/lmv/lmv_internal.h   |4 +-
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|   70 
 drivers/staging/lustre/lustre/mdc/mdc_internal.h   |4 +-
 drivers/staging/lustre/lustre/mdc/mdc_locks.c  |2 +-
 drivers/staging/lustre/lustre/mdc/mdc_reint.c  |6 +-
 drivers/staging/lustre/lustre/mdc/mdc_request.c|8 +-
 14 files changed, 174 insertions(+), 166 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 3444add..8736826 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2497,18 +2497,52 @@ struct lmv_desc {
struct obd_uuid ld_uuid;
 };
 
-/* lmv structures */
-#define LMV_MAGIC_V1   0x0CD10CD0  /* normal stripe lmv magic */
-#define LMV_USER_MAGIC 0x0CD20CD0  /* default lmv magic*/
-#define LMV_MAGIC_MIGRATE  0x0CD30CD0  /* migrate stripe lmv magic */
-#define LMV_MAGIC  LMV_MAGIC_V1
+/* LMV layout EA, and it will be stored both in master and slave object */
+struct lmv_mds_md_v1 {
+   __u32 lmv_magic;
+   __u32 lmv_stripe_count;
+   __u32 lmv_master_mdt_index; /* On master object, it is master
+* MDT index, on slave object, it
+* is stripe index of the slave obj
+*/
+   __u32 lmv_hash_type;/* dir stripe policy, i.e. indicate
+* which hash function to be used,
+* Note: only lower 16 bits is being
+* used for now. Higher 16 bits will
+* be used to mark the object status,
+* for example migrating or dead.
+*/
+   __u32 lmv_layout_version;   /* Used for directory restriping */
+   __u32 lmv_padding;
+   struct lu_fid lmv_master_fid;   /* The FID of the master object, which
+* is the namespace-visible dir FID
+*/
+   char lmv_pool_name[LOV_MAXPOOLNAME];/* pool name */
+   struct lu_fid lmv_stripe_fids[0];   /* FIDs for each stripe */
+};
 
+#define LMV_MAGIC_V10x0CD20CD0 /* normal stripe lmv magic */
+#define LMV_MAGIC   LMV_MAGIC_V1
+
+/* #define LMV_USER_MAGIC 0x0CD30CD0 */
+#define LMV_MAGIC_STRIPE 0x0CD40CD0/* magic for dir sub_stripe */
+
+/*
+ *Right now only the lower part(0-16bits) of lmv_hash_type is being used,
+ * and the higher part will be the flag to indicate the status of object,
+ * for example the object is being migrated. And the hash function
+ * might be interpreted differently with different flags.
+ */
 enum lmv_hash_type {
LMV_HASH_TYPE_ALL_CHARS = 1,
LMV_HASH_TYPE_FNV_1A_64 = 2,
-   LMV_HASH_TYPE_MIGRATION = 3,
 };
 
+#define LMV_HASH_TYPE_MASK 0x
+
+#define LMV_HASH_FLAG_MIGRATION0x8000
+#define LMV_HASH_FLAG_DEAD 0x4000
+
 #define LMV_HASH_NAME_ALL_CHARS"all_char"
 #define LMV_HASH_NAME_FNV_1A_64  

[PATCH 49/80] staging: lustre: lmv: validate lock with correct stripe FID

2016-08-16 Thread James Simmons
From: wang di 

In ll_lookup_it_finish, we need use the real parent(stripe)
FID to validate the parent UPDATE lock.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4925
Reviewed-on: http://review.whamcloud.com/10026
Reviewed-by: John L. Hammond 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/obd.h   |5 +
 drivers/staging/lustre/lustre/include/obd_class.h |   13 +
 drivers/staging/lustre/lustre/llite/namei.c   |   15 +--
 drivers/staging/lustre/lustre/lmv/lmv_obd.c   |   19 ++-
 4 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/obd.h 
b/drivers/staging/lustre/lustre/include/obd.h
index 52020a9..b7bdd07 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
@@ -1103,6 +1103,11 @@ struct md_ops {
 ldlm_policy_data_t *, enum ldlm_mode,
 enum ldlm_cancel_flags flags, void *opaque);
 
+   int (*get_fid_from_lsm)(struct obd_export *,
+   const struct lmv_stripe_md *,
+   const char *name, int namelen,
+   struct lu_fid *fid);
+
int (*intent_getattr_async)(struct obd_export *,
struct md_enqueue_info *,
struct ldlm_enqueue_info *);
diff --git a/drivers/staging/lustre/lustre/include/obd_class.h 
b/drivers/staging/lustre/lustre/include/obd_class.h
index e86961c..69b628b 100644
--- a/drivers/staging/lustre/lustre/include/obd_class.h
+++ b/drivers/staging/lustre/lustre/include/obd_class.h
@@ -1699,6 +1699,19 @@ static inline int md_revalidate_lock(struct obd_export 
*exp,
return rc;
 }
 
+static inline int md_get_fid_from_lsm(struct obd_export *exp,
+ const struct lmv_stripe_md *lsm,
+ const char *name, int namelen,
+ struct lu_fid *fid)
+{
+   int rc;
+
+   EXP_CHECK_MD_OP(exp, get_fid_from_lsm);
+   EXP_MD_COUNTER_INCREMENT(exp, get_fid_from_lsm);
+   rc = MDP(exp->exp_obd, get_fid_from_lsm)(exp, lsm, name, namelen, fid);
+   return rc;
+}
+
 /* OBD Metadata Support */
 
 int obd_init_caches(void);
diff --git a/drivers/staging/lustre/lustre/llite/namei.c 
b/drivers/staging/lustre/lustre/llite/namei.c
index 6e11b99..581b083 100644
--- a/drivers/staging/lustre/lustre/llite/namei.c
+++ b/drivers/staging/lustre/lustre/llite/namei.c
@@ -487,9 +487,20 @@ static int ll_lookup_it_finish(struct ptlrpc_request 
*request,
struct lookup_intent parent_it = {
.it_op = IT_GETATTR,
.it_lock_handle = 0 };
+   struct lu_fid fid = ll_i2info(parent)->lli_fid;
+
+   /* If it is striped directory, get the real stripe parent */
+   if (unlikely(ll_i2info(parent)->lli_lsm_md)) {
+   rc = md_get_fid_from_lsm(ll_i2mdexp(parent),
+ll_i2info(parent)->lli_lsm_md,
+(*de)->d_name.name,
+(*de)->d_name.len, );
+   if (rc)
+   return rc;
+   }
 
-   if (md_revalidate_lock(ll_i2mdexp(parent), _it,
-  _i2info(parent)->lli_fid, NULL)) {
+   if (md_revalidate_lock(ll_i2mdexp(parent), _it, ,
+  NULL)) {
d_lustre_revalidate(*de);
ll_intent_release(_it);
}
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 03594f0..9821f69 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -2991,6 +2991,22 @@ static int lmv_revalidate_lock(struct obd_export *exp, 
struct lookup_intent *it,
return rc;
 }
 
+int lmv_get_fid_from_lsm(struct obd_export *exp,
+const struct lmv_stripe_md *lsm,
+const char *name, int namelen, struct lu_fid *fid)
+{
+   const struct lmv_oinfo *oinfo;
+
+   LASSERT(lsm);
+   oinfo = lsm_name_to_stripe_info(lsm, name, namelen);
+   if (IS_ERR(oinfo))
+   return PTR_ERR(oinfo);
+
+   *fid = oinfo->lmo_fid;
+
+   return 0;
+}
+
 /**
  * For lmv, only need to send request to master MDT, and the master MDT will
  * process with other slave MDTs. The only exception is Q_GETOQUOTA for 

[PATCH 39/80] staging: lustre: llite: add error handler in inode prepare phase

2016-08-16 Thread James Simmons
From: wang di 

Add error handler during inode inialization, so inode will
become bad inode if something bad happens during inode prepare
phase, otherwise the striped directory will not get its layout
and being mis-regarded as normal directory.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4930
Reviewed-on: http://review.whamcloud.com/10170
Reviewed-by: Lai Siyao 
Reviewed-by: Fan Yong 
Reviewed-by: John L. Hammond 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lustre/llite/llite_internal.h   |4 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c|   66 +++
 drivers/staging/lustre/lustre/llite/namei.c|   59 ++
 3 files changed, 72 insertions(+), 57 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index 120aca3..e101dd8 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -766,8 +766,8 @@ int ll_setattr(struct dentry *de, struct iattr *attr);
 int ll_statfs(struct dentry *de, struct kstatfs *sfs);
 int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs,
   __u64 max_age, __u32 flags);
-void ll_update_inode(struct inode *inode, struct lustre_md *md);
-void ll_read_inode2(struct inode *inode, void *opaque);
+int ll_update_inode(struct inode *inode, struct lustre_md *md);
+int ll_read_inode2(struct inode *inode, void *opaque);
 void ll_delete_inode(struct inode *inode);
 int ll_iocontrol(struct inode *inode, struct file *file,
 unsigned int cmd, unsigned long arg);
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c 
b/drivers/staging/lustre/lustre/llite/llite_lib.c
index 111264e..ea79ca3 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -464,7 +464,7 @@ static int client_common_fill_super(struct super_block *sb, 
char *md, char *dt,
md_free_lustre_md(sbi->ll_md_exp, );
ptlrpc_req_finished(request);
 
-   if (!(root)) {
+   if (IS_ERR(root)) {
if (lmd.lsm)
obd_free_memmd(sbi->ll_dt_exp, );
 #ifdef CONFIG_FS_POSIX_ACL
@@ -1109,11 +1109,11 @@ static inline int lli_lsm_md_eq(const struct 
lmv_stripe_md *lsm_md1,
   lsm_md2->lsm_md_pool_name);
 }
 
-static void ll_update_lsm_md(struct inode *inode, struct lustre_md *md)
+static int ll_update_lsm_md(struct inode *inode, struct lustre_md *md)
 {
struct ll_inode_info *lli = ll_i2info(inode);
struct lmv_stripe_md *lsm = md->lmv;
-   int idx;
+   int idx, rc;
 
LASSERT(S_ISDIR(inode->i_mode));
CDEBUG(D_INODE, "update lsm %p of "DFID"\n", lli->lli_lsm_md,
@@ -1122,7 +1122,7 @@ static void ll_update_lsm_md(struct inode *inode, struct 
lustre_md *md)
/* no striped information from request. */
if (!lsm) {
if (!lli->lli_lsm_md) {
-   return;
+   return 0;
} else if (lli->lli_lsm_md->lsm_md_magic == LMV_MAGIC_MIGRATE) {
/*
 * migration is done, the temporay MIGRATE layout has
@@ -1132,27 +1132,22 @@ static void ll_update_lsm_md(struct inode *inode, 
struct lustre_md *md)
   PFID(ll_inode2fid(inode)));
lmv_free_memmd(lli->lli_lsm_md);
lli->lli_lsm_md = NULL;
-   return;
+   return 0;
} else {
/*
 * The lustre_md from req does not include stripeEA,
 * see ll_md_setattr
 */
-   return;
+   return 0;
}
}
 
/* set the directory layout */
if (!lli->lli_lsm_md) {
-   int rc;
-
rc = ll_init_lsm_md(inode, md);
-   if (rc) {
-   CERROR("%s: init "DFID" failed: rc = %d\n",
-  ll_get_fsname(inode->i_sb, NULL, 0),
-  PFID(>lli_fid), rc);
-   return;
-   }
+   if (rc)
+   return rc;
+
lli->lli_lsm_md = lsm;
/*
 * set lsm_md to NULL, so the following free lustre_md
@@ -1161,7 +1156,7 @@ static void ll_update_lsm_md(struct inode *inode, struct 
lustre_md *md)
md->lmv = NULL;
CDEBUG(D_INODE, "Set lsm %p magic %x to "DFID"\n", lsm,
   lsm->lsm_md_magic, PFID(ll_inode2fid(inode)));
-   return;
+ 

Re: [PATCH 01/15 RESEND] staging: dgnc: remove redundant NULL checks in

2016-08-16 Thread DaeSeok Youn
2016-08-16 2:05 GMT+09:00 Greg KH :
> On Wed, Jul 06, 2016 at 03:11:13PM +0900, Daeseok Youn wrote:
>> The dgnc_block_til_ready() is only used in dgnc_tty_open().
>> The unit data(struct un_t) was stored into tty->driver_data in 
>> dgnc_tty_open().
>> And also tty and un were tested about NULL so these variables doesn't
>> need to check for NULL in dgnc_block_til_ready().
>>
>> Signed-off-by: Daeseok Youn 
>> ---
>> RESEND: This patch was not merged for a long time, if there is any reason
>> why this patch could NOT be merged into staging tree, let me know.
>> There were no comment for this patch.
>> I cannot understand why this patch have to wait long time to merge.
>> And I also sent emails to mailing-lists for reminding this patch...
>> please let me know, what is the problem to merge this patch into staging 
>> tree.
>
> Please note, staging patches are at the bottom of my priority queue.
> Combined with a vacation, conferences, and a merge window and there are
> a lot of pending staging patches in my to-review queue.

That's Ok. but I took a long time to wait for merging my patches in
this case. :-(

>
> thanks for your patience.
>
> greg k-h
Thanks.

Regards,
Daeseok Youn.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 13/80] staging: lustre: llite: fix "getdirstripe" to show stripe info

2016-08-16 Thread James Simmons
From: wang di 

Fix "lfs getdirstripe", so it can show layout information
of striped directory

[root@testnode tests]# ../utils/lfs getdirstripe /mnt/lustre/test1
/mnt/lustre/test1
lmv_stripe_count: 2
lmv_stripe_offset: 0
mdtidx   FID[seq:oid:ver]
 0   [0x28400:0x1:0x0]
 1   [0x2c400:0x1:0x0]

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-on: http://review.whamcloud.com/7228
Reviewed-by: Andreas Dilger 
Reviewed-by: John L. Hammond 
Reviewed-by: Alex Zhuravlev 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |4 +
 .../lustre/lustre/include/lustre/lustre_user.h |1 +
 drivers/staging/lustre/lustre/llite/dir.c  |  184 +++-
 .../staging/lustre/lustre/llite/llite_internal.h   |4 +-
 drivers/staging/lustre/lustre/llite/xattr.c|7 +-
 .../staging/lustre/lustre/ptlrpc/pack_generic.c|   26 +++
 6 files changed, 180 insertions(+), 46 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index a612080..0ff30c6 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1728,6 +1728,8 @@ lov_mds_md_max_stripe_count(size_t buf_size, __u32 
lmm_magic)
 #define OBD_MD_FLDATAVERSION (0x0010ULL) /* iversion sum */
 #define OBD_MD_FLRELEASED(0x0020ULL) /* file released */
 
+#define OBD_MD_DEFAULT_MEA   (0x0040ULL) /* default MEA */
+
 #define OBD_MD_FLGETATTR (OBD_MD_FLID| OBD_MD_FLATIME | OBD_MD_FLMTIME | \
  OBD_MD_FLCTIME | OBD_MD_FLSIZE  | OBD_MD_FLBLKSZ | \
  OBD_MD_FLMODE  | OBD_MD_FLTYPE  | OBD_MD_FLUID   | \
@@ -2543,6 +2545,8 @@ union lmv_mds_md {
struct lmv_user_md  lmv_user_md;
 };
 
+void lustre_swab_lmv_mds_md(union lmv_mds_md *lmm);
+
 static inline ssize_t lmv_mds_md_size(int stripe_count, unsigned int lmm_magic)
 {
ssize_t len = -EINVAL;
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index d496d0e..26dbda0 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
@@ -242,6 +242,7 @@ struct ost_id {
 #define LL_IOC_SET_LEASE   _IOWR('f', 243, long)
 #define LL_IOC_GET_LEASE   _IO('f', 244)
 #define LL_IOC_HSM_IMPORT  _IOWR('f', 245, struct hsm_user_import)
+#define LL_IOC_LMV_SET_DEFAULT_STRIPE  _IOWR('f', 246, struct lmv_user_md)
 
 #define LL_STATFS_LMV 1
 #define LL_STATFS_LOV 2
diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index a0560b6..5288750 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -749,6 +749,13 @@ int ll_dir_setstripe(struct inode *inode, struct 
lov_user_md *lump,
lum_size = sizeof(struct lov_user_md_v3);
break;
}
+   case LMV_USER_MAGIC: {
+   if (lump->lmm_magic != cpu_to_le32(LMV_USER_MAGIC))
+   lustre_swab_lmv_user_md(
+   (struct lmv_user_md *)lump);
+   lum_size = sizeof(struct lmv_user_md);
+   break;
+   }
default: {
CDEBUG(D_IOCTL, "bad userland LOV MAGIC: %#08x != %#08x 
nor %#08x\n",
   lump->lmm_magic, LOV_USER_MAGIC_V1,
@@ -819,8 +826,16 @@ end:
return rc;
 }
 
-int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
-int *lmm_size, struct ptlrpc_request **request)
+/**
+ * This function will be used to get default LOV/LMV/Default LMV
+ * @valid will be used to indicate which stripe it will retrieve
+ * OBD_MD_MEA  LMV stripe EA
+ * OBD_MD_DEFAULT_MEA  Default LMV stripe EA
+ * otherwise   Default LOV EA.
+ * Each time, it can only retrieve 1 stripe EA
+ **/
+int ll_dir_getstripe(struct inode *inode, void **plmm, int *plmm_size,
+struct ptlrpc_request **request, u64 valid)
 {
struct ll_sb_info *sbi = ll_i2sbi(inode);
struct mdt_body   *body;
@@ -829,7 +844,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md 
**lmmp,
int rc, lmmsize;
struct md_op_data *op_data;
 
-   rc = ll_get_default_mdsize(sbi, );
+   rc = ll_get_max_mdsize(sbi, );
if (rc)
return rc;
 
@@ 

[PATCH 22/80] staging: lustre: llite: a few fixes for migration.

2016-08-16 Thread James Simmons
From: wang di 

1. Clear the client dentry cache before migrating file/directory
   to the remote MDT.

2. Do not return stripe information to client, if it did not get
   the layout lock.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4682
Reviewed-on: http://review.whamcloud.com/9522
Reviewed-by: Andreas Dilger 
Reviewed-by: John L. Hammond 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c  |   22 +++-
 drivers/staging/lustre/lustre/llite/file.c |   34 +++-
 .../staging/lustre/lustre/llite/llite_internal.h   |2 +
 drivers/staging/lustre/lustre/lov/lov_object.c |1 +
 4 files changed, 28 insertions(+), 31 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index ef7322e..84bec03 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -1318,11 +1318,9 @@ static long ll_dir_ioctl(struct file *file, unsigned int 
cmd, unsigned long arg)
return 0;
}
case IOC_MDC_LOOKUP: {
-   struct ptlrpc_request *request = NULL;
int namelen, len = 0;
char *buf = NULL;
char *filename;
-   struct md_op_data *op_data;
 
rc = obd_ioctl_getdata(, , (void __user *)arg);
if (rc)
@@ -1338,21 +1336,13 @@ static long ll_dir_ioctl(struct file *file, unsigned 
int cmd, unsigned long arg)
goto out_free;
}
 
-   op_data = ll_prep_md_op_data(NULL, inode, NULL, filename, 
namelen,
-0, LUSTRE_OPC_ANY, NULL);
-   if (IS_ERR(op_data)) {
-   rc = PTR_ERR(op_data);
-   goto out_free;
-   }
-
-   op_data->op_valid = OBD_MD_FLID;
-   rc = md_getattr_name(sbi->ll_md_exp, op_data, );
-   ll_finish_md_op_data(op_data);
+   rc = ll_get_fid_by_name(inode, filename, namelen, NULL);
if (rc < 0) {
-   CDEBUG(D_INFO, "md_getattr_name: %d\n", rc);
+   CERROR("%s: lookup %.*s failed: rc = %d\n",
+  ll_get_fsname(inode->i_sb, NULL, 0), namelen,
+  filename, rc);
goto out_free;
}
-   ptlrpc_req_finished(request);
 out_free:
obd_ioctl_freedata(buf, len);
return rc;
@@ -1981,7 +1971,7 @@ out_quotactl:
 
filename = data->ioc_inlbuf1;
namelen = data->ioc_inllen1;
-   if (namelen < 1) {
+   if (namelen < 1 || namelen != strlen(filename) + 1) {
rc = -EINVAL;
goto migrate_free;
}
@@ -1992,7 +1982,7 @@ out_quotactl:
}
mdtidx = *(int *)data->ioc_inlbuf2;
 
-   rc = ll_migrate(inode, file, mdtidx, filename, namelen);
+   rc = ll_migrate(inode, file, mdtidx, filename, namelen - 1);
 migrate_free:
obd_ioctl_freedata(buf, len);
 
diff --git a/drivers/staging/lustre/lustre/llite/file.c 
b/drivers/staging/lustre/lustre/llite/file.c
index 8d98db6..769b028 100644
--- a/drivers/staging/lustre/lustre/llite/file.c
+++ b/drivers/staging/lustre/lustre/llite/file.c
@@ -2828,8 +2828,8 @@ ll_file_flock(struct file *file, int cmd, struct 
file_lock *file_lock)
return rc;
 }
 
-static int ll_get_fid_by_name(struct inode *parent, const char *name,
- int namelen, struct lu_fid *fid)
+int ll_get_fid_by_name(struct inode *parent, const char *name,
+  int namelen, struct lu_fid *fid)
 {
struct md_op_data *op_data = NULL;
struct ptlrpc_request *req;
@@ -2843,20 +2843,19 @@ static int ll_get_fid_by_name(struct inode *parent, 
const char *name,
 
op_data->op_valid = OBD_MD_FLID;
rc = md_getattr_name(ll_i2sbi(parent)->ll_md_exp, op_data, );
+   ll_finish_md_op_data(op_data);
if (rc < 0)
-   goto out_free;
+   return rc;
 
body = req_capsule_server_get(>rq_pill, _MDT_BODY);
if (!body) {
rc = -EFAULT;
goto out_req;
}
-   *fid = body->fid1;
+   if (fid)
+   *fid = body->fid1;
 out_req:
ptlrpc_req_finished(req);
-out_free:
-   if (op_data)
-   ll_finish_md_op_data(op_data);
return rc;
 }
 
@@ -2864,12 +2863,13 @@ int ll_migrate(struct inode *parent, struct file *file, 
int mdtidx,
   const char *name, int namelen)
 {
struct ptlrpc_request *request = NULL;
+   struct inode *child_inode = NULL;

[PATCH 27/80] staging: lustre: simplify inline functions in lustre_fid.h

2016-08-16 Thread James Simmons
From: John L. Hammond 

Several inline functions return a structure that was passed in.
Their is no need for this so just make these function void.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2675
Reviewed-on: http://review.whamcloud.com/8641
Reviewed-by: wangdi 
Reviewed-by: Fan Yong 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/lustre_fid.h |   16 
 1 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h 
b/drivers/staging/lustre/lustre/include/lustre_fid.h
index 6f7dc15..f1d5bbd 100644
--- a/drivers/staging/lustre/lustre/include/lustre_fid.h
+++ b/drivers/staging/lustre/lustre/include/lustre_fid.h
@@ -393,14 +393,12 @@ struct ldlm_namespace;
  * but was moved into name[1] along with the OID to avoid consuming the
  * renaming name[2,3] fields that need to be used for the quota identifier.
  */
-static inline struct ldlm_res_id *
+static inline void
 fid_build_reg_res_name(const struct lu_fid *fid, struct ldlm_res_id *res)
 {
memset(res, 0, sizeof(*res));
res->name[LUSTRE_RES_ID_SEQ_OFF] = fid_seq(fid);
res->name[LUSTRE_RES_ID_VER_OID_OFF] = fid_ver_oid(fid);
-
-   return res;
 }
 
 /*
@@ -416,29 +414,25 @@ static inline bool fid_res_name_eq(const struct lu_fid 
*fid,
 /*
  * Extract FID from LDLM resource. Reverse of fid_build_reg_res_name().
  */
-static inline struct lu_fid *
+static inline void
 fid_extract_from_res_name(struct lu_fid *fid, const struct ldlm_res_id *res)
 {
fid->f_seq = res->name[LUSTRE_RES_ID_SEQ_OFF];
fid->f_oid = (__u32)(res->name[LUSTRE_RES_ID_VER_OID_OFF]);
fid->f_ver = (__u32)(res->name[LUSTRE_RES_ID_VER_OID_OFF] >> 32);
LASSERT(fid_res_name_eq(fid, res));
-
-   return fid;
 }
 
 /*
  * Build (DLM) resource identifier from global quota FID and quota ID.
  */
-static inline struct ldlm_res_id *
+static inline void
 fid_build_quota_res_name(const struct lu_fid *glb_fid, union lquota_id *qid,
 struct ldlm_res_id *res)
 {
fid_build_reg_res_name(glb_fid, res);
res->name[LUSTRE_RES_ID_QUOTA_SEQ_OFF] = fid_seq(>qid_fid);
res->name[LUSTRE_RES_ID_QUOTA_VER_OID_OFF] = fid_ver_oid(>qid_fid);
-
-   return res;
 }
 
 /*
@@ -455,14 +449,12 @@ static inline void fid_extract_from_quota_res(struct 
lu_fid *glb_fid,
(__u32)(res->name[LUSTRE_RES_ID_QUOTA_VER_OID_OFF] >> 32);
 }
 
-static inline struct ldlm_res_id *
+static inline void
 fid_build_pdo_res_name(const struct lu_fid *fid, unsigned int hash,
   struct ldlm_res_id *res)
 {
fid_build_reg_res_name(fid, res);
res->name[LUSTRE_RES_ID_HSH_OFF] = hash;
-
-   return res;
 }
 
 /**
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 23/80] staging: lustre: mdc: fixup MDS_SWAP_LAYOUTS ELC handling

2016-08-16 Thread James Simmons
From: John L. Hammond 

In mdc_ioc_swap_layouts() cancel *any* unused locks with LAYOUT or
XATTR IBITS set on the two files. (This matches the locks acquired in
mdt_swap_layouts(). Previously only locks that conflicted with a CR
LAYOUT lock were cancelled.)

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4320
Reviewed-on: http://review.whamcloud.com/9329
Reviewed-by: Andreas Dilger 
Reviewed-by: Faccini Bruno 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/mdc/mdc_request.c |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c 
b/drivers/staging/lustre/lustre/mdc/mdc_request.c
index 702ced9..030295f 100644
--- a/drivers/staging/lustre/lustre/mdc/mdc_request.c
+++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c
@@ -1670,9 +1670,11 @@ static int mdc_ioc_swap_layouts(struct obd_export *exp,
 * with the request RPC to avoid extra RPC round trips
 */
count = mdc_resource_get_unused(exp, _data->op_fid1, ,
-   LCK_CR, MDS_INODELOCK_LAYOUT);
+   LCK_CR, MDS_INODELOCK_LAYOUT |
+   MDS_INODELOCK_XATTR);
count += mdc_resource_get_unused(exp, _data->op_fid2, ,
-LCK_CR, MDS_INODELOCK_LAYOUT);
+LCK_CR, MDS_INODELOCK_LAYOUT |
+MDS_INODELOCK_XATTR);
 
req = ptlrpc_request_alloc(class_exp2cliimp(exp),
   _MDS_SWAP_LAYOUTS);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 10/80] staging: lustre: lmv: remove lmv_get_easize

2016-08-16 Thread James Simmons
From: wang di 

Completely replace lmv_get_easize with lmv_mds_md_size.
With this change we can delete lmv_get_easize.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_internal.h |7 ---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c  |2 +-
 2 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h 
b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
index 90a9786..f4c917b 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h
+++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
@@ -55,13 +55,6 @@ int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, 
u32 mds);
 int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
  struct md_op_data *op_data);
 
-static inline int lmv_get_easize(struct lmv_obd *lmv)
-{
-   return sizeof(struct lmv_stripe_md) +
-   lmv->desc.ld_tgt_count *
-   sizeof(struct lu_fid);
-}
-
 static inline struct lmv_tgt_desc *
 lmv_get_target(struct lmv_obd *lmv, u32 mds)
 {
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 1ba5900..0b1260d 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -558,7 +558,7 @@ int lmv_check_connect(struct obd_device *obd)
lmv_set_timeouts(obd);
class_export_put(lmv->exp);
lmv->connected = 1;
-   easize = lmv_get_easize(lmv);
+   easize = lmv_mds_md_size(lmv->desc.ld_tgt_count, LMV_MAGIC);
lmv_init_ea_size(obd->obd_self_export, easize, 0, 0, 0);
mutex_unlock(>lmv_init_mutex);
return 0;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 08/80] staging: lustre: lmv: remove duplicate MAX_HASH_*

2016-08-16 Thread James Simmons
From: wang di 

The MAX_HASH_* macros already exist in obd.h. Remove
the duplicated defines in lustre_idl.h.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |4 
 1 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 32471a6..5f31724 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2486,10 +2486,6 @@ struct lmv_desc {
 #define MEA_MAGIC_ALL_CHARS  0xb222a11c
 #define MEA_MAGIC_HASH_SEGMENT   0xb222a11b
 
-#define MAX_HASH_SIZE_320x7fffUL
-#define MAX_HASH_SIZE  0x7fffULL
-#define MAX_HASH_HIGHEST_BIT 0x1000ULL
-
 /* lmv structures */
 #define LMV_MAGIC_V1   0x0CD10CD0  /* normal stripe lmv magic */
 #define LMV_USER_MAGIC 0x0CD20CD0  /* default lmv magic*/
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 00/80] staging: lustre: majority of missing fixes for 2.6 release

2016-08-16 Thread James Simmons
This is the combination of two previous patch sets that cover missing
fixes for lustre version 2.5.56 to the 2.6 release minus a few patches that
have some bug regressions. Also in this update are the latest LNet fixes.

Alexander Boyko (1):
  staging: lustre: lnet: make connection more stable with packet loss

Andriy Skulysh (1):
  staging: lustre: ptlrpc: request gets stuck in UNREGISTERING phase

Brian Behlendorf (1):
  staging: lustre: obd: limit lu_object cache

Chris Horn (1):
  staging: lustre: ptlrpc: Early replies need to honor at_max

Christopher J. Morrone (1):
  staging: lustre: Remove static declaration in anonymous union

Dmitry Eremin (2):
  staging: lustre: lmv: fix issue found by Klocwork Insight tool
  staging: lustre: lmv: build error with gcc 4.7.0 20110509

Doug Oucharek (3):
  staging: lustre: lnet: Do not drop message when shutting down LNet
  staging: lustre: lnet: Correct position of lnet_ni_decref()
  staging: lustre: lnet: Stop Infinite CON RACE Condition

Emoly Liu (1):
  staging: lustre: ldlm: improve ldlm_lock_create() return value

Fan Yong (6):
  staging: lustre: obdclass: bug fixes for lu_device_type handling
  staging: lustre: llite: enable clients to inject error for lfsck
  staging: lustre: obdclass: unified flow control interfaces
  staging: lustre: reorder LOV_MAGIC_* definition
  staging: lustre: lov: new pattern flag for partially repaired file
  staging: lustre: lmv: build master LMV EA dynamically build via readdir

Gregoire Pichon (1):
  staging: lustre: llite: fix inconsistencies of root squash feature

Hongchao Zhang (2):
  staging: lustre: llite: set dir LOV xattr length variable
  staging: lustre: osc: Automatically increase the max_dirty_mb

James Simmons (3):
  staging: lustre: obdclass: compile issues with variable not being initialized
  staging: lustre: include: fix one off errors in lustre_id.h
  staging: lustre: llite: remove assert for acl refcount

Jian Yu (1):
  staging: lustre: obdclass: fix lmd_parse() to handle comma-separated NIDs

Jinshan Xiong (7):
  staging: lustre: osc: allow to call brw_commit() multiple times
  staging: lustre: llite: avoid a deadlock in page write
  staging: lustre: lov: handle the case of stripe size is not power 2
  staging: lustre: llite: Fix the deadlock in balance_dirty_pages()
  staging: lustre: llite: Change readdir BRW metrics
  staging: lustre: clio: Reduce memory overhead of per-page allocation
  staging: lustre: osc: revise unstable pages accounting

John L. Hammond (13):
  staging: lustre: mdc: fixup MDS_SWAP_LAYOUTS ELC handling
  staging: lustre: don't need to const __u64 parameters for lustre_idl.h
  staging: lustre: const correct FID/OSTID/... helpers
  staging: lustre: use bool for several function in lustre_idl.h/lustre_fid.h
  staging: lustre: simplify inline functions in lustre_fid.h
  staging: lustre: lmv: access lum_stripe_offset as little endian
  staging: lustre: lmv: cleanup req in lmv_getattr_name()
  staging: lustre: lmv: rename request to preq in lmv_getattr_name()
  staging: lustre: move ioctls to lustre_ioctl.h
  staging: lustre: llite: validate names
  staging: lustre: uapi: reduce scope of lustre_idl.h
  staging: lustre: mdt: add mbo_ prefix to members of struct mdt_body
  staging: lustre: obd: validate open handle cookies

Lai Siyao (2):
  staging: lustre: fid: do open-by-fid by default
  staging: lustre: ptlrpc: add OBD_CONNECT_UNLINK_CLOSE flag

Liang Zhen (1):
  staging: lustre: lnet: lock improvement for ko2iblnd

Mikhail Pershin (1):
  staging: lustre: llog: keep llog ctxt indices constant

Nathaniel Clark (1):
  staging: lustre: lmv: Ensure lmv_intent_lookup cleans up reqp

Niu Yawei (1):
  staging: lustre: obd: rename lsr_padding to lsr_valid

Patrick Farrell (1):
  staging: lustre: fld: add fld description documentation

Ryan Haasken (1):
  staging: lustre: libcfs: Only dump log once per sec. to avoid EEXIST

Vitaly Fertman (1):
  staging: lustre: ldlm: flock completion fixes.

wang di (27):
  staging: lustre: llite: add md_op_data parameter to ll_get_dir_page
  staging: lustre: llite: remove comment from ll_dir_read
  staging: lustre: llite: style cleanup for llite_internal.h
  staging: lustre: llite: pass inode to ll_release_page
  staging: lustre: llite: change remove parameter to bool
  staging: lustre: mdc: don't take rpc lock for readdir case
  staging: lustre: lmv: remove unused lmv_get_mea function
  staging: lustre: lmv: remove duplicate MAX_HASH_*
  staging: lustre: lmv: change handling of lmv striping information
  staging: lustre: lmv: remove lmv_get_easize
  staging: lustre: lmv: replace obd_free_memmd with lmv_free_memmd
  staging: lustre: create striped directory
  staging: lustre: llite: fix "getdirstripe" to show stripe info
  staging: lustre: delete striped directory
  staging: lustre: add ability to migrate inodes.
  staging: lustre: llite: a few fixes for migration.
  staging: lustre: lmv: lookup remote migrating object in LMV
  staging: lustre: llite: add error 

[PATCH 04/80] staging: lustre: llite: pass inode to ll_release_page

2016-08-16 Thread James Simmons
From: wang di 

Add a inode parameter to ll_release_page. This will be
used in the future.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c  |   17 +
 .../staging/lustre/lustre/llite/llite_internal.h   |2 +-
 drivers/staging/lustre/lustre/llite/statahead.c|   20 +++-
 3 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index d854edd..3a800b2 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -236,7 +236,7 @@ static int ll_dir_filler(void *_hash, struct page *page0)
return rc;
 }
 
-void ll_release_page(struct page *page, int remove)
+void ll_release_page(struct inode *inode, struct page *page, int remove)
 {
kunmap(page);
if (remove) {
@@ -297,7 +297,7 @@ static struct page *ll_dir_page_locate(struct inode *dir, 
__u64 *hash,
CDEBUG(D_VFSTRACE, "page %lu [%llu %llu], hash %llu\n",
   offset, *start, *end, *hash);
if (*hash > *end) {
-   ll_release_page(page, 0);
+   ll_release_page(dir, page, 0);
page = NULL;
} else if (*end != *start && *hash == *end) {
/*
@@ -306,8 +306,9 @@ static struct page *ll_dir_page_locate(struct inode *dir, 
__u64 *hash,
 * ll_get_dir_page() will issue RPC to fetch
 * the page we want.
 */
-   ll_release_page(page,
-   le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
+   ll_release_page(dir, page,
+   le32_to_cpu(dp->ldp_flags) &
+   LDF_COLLIDE);
page = NULL;
}
} else {
@@ -462,7 +463,7 @@ out_unlock:
return page;
 
 fail:
-   ll_release_page(page, 1);
+   ll_release_page(dir, page, 1);
page = ERR_PTR(-EIO);
goto out_unlock;
 }
@@ -560,7 +561,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 
if (done) {
pos = hash;
-   ll_release_page(page, 0);
+   ll_release_page(inode, page, 0);
break;
}
 
@@ -571,13 +572,13 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 * End of directory reached.
 */
done = 1;
-   ll_release_page(page, 0);
+   ll_release_page(inode, page, 0);
} else {
/*
 * Normal case: continue to the next
 * page.
 */
-   ll_release_page(page,
+   ll_release_page(inode, page,
le32_to_cpu(dp->ldp_flags) &
LDF_COLLIDE);
next = pos;
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index 1ced397..4b03a64 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -655,7 +655,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 int ll_get_mdt_idx(struct inode *inode);
 struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
 __u64 hash, struct ll_dir_chain *chain);
-void ll_release_page(struct page *page, int remove);
+void ll_release_page(struct inode *inode, struct page *page, int remove);
 
 /* llite/namei.c */
 extern const struct inode_operations ll_special_inode_operations;
diff --git a/drivers/staging/lustre/lustre/llite/statahead.c 
b/drivers/staging/lustre/lustre/llite/statahead.c
index 1b222c7..2949ff6 100644
--- a/drivers/staging/lustre/lustre/llite/statahead.c
+++ b/drivers/staging/lustre/lustre/llite/statahead.c
@@ -1142,7 +1142,7 @@ interpret_it:
ll_post_statahead(sai);
 
if (unlikely(!thread_is_running(thread))) {
- 

[PATCH 06/80] staging: lustre: mdc: don't take rpc lock for readdir case

2016-08-16 Thread James Simmons
From: wang di 

If the operation is IT_READDIR don't need to handle the
mdc RPC lock.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/10761
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4906
Reviewed-by: John L. Hammond 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/lustre_mdc.h |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre_mdc.h 
b/drivers/staging/lustre/lustre/include/lustre_mdc.h
index fa62b95..0a8c639 100644
--- a/drivers/staging/lustre/lustre/include/lustre_mdc.h
+++ b/drivers/staging/lustre/lustre/include/lustre_mdc.h
@@ -96,7 +96,7 @@ static inline void mdc_get_rpc_lock(struct mdc_rpc_lock *lck,
struct lookup_intent *it)
 {
if (it && (it->it_op == IT_GETATTR || it->it_op == IT_LOOKUP ||
-  it->it_op == IT_LAYOUT))
+  it->it_op == IT_LAYOUT || it->it_op == IT_READDIR))
return;
 
/* This would normally block until the existing request finishes.
@@ -136,7 +136,7 @@ static inline void mdc_put_rpc_lock(struct mdc_rpc_lock 
*lck,
struct lookup_intent *it)
 {
if (it && (it->it_op == IT_GETATTR || it->it_op == IT_LOOKUP ||
-  it->it_op == IT_LAYOUT))
+  it->it_op == IT_LAYOUT || it->it_op == IT_READDIR))
return;
 
if (lck->rpcl_it == MDC_FAKE_RPCL_IT) { /* OBD_FAIL_MDC_RPCS_SEM */
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 30/80] staging: lustre: lmv: Ensure lmv_intent_lookup cleans up reqp

2016-08-16 Thread James Simmons
From: Nathaniel Clark 

Ensure there aren't invalid pointers hanging around after
ptlrpc_req_finished is called.

Signed-off-by: Nathaniel Clark 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4826
Reviewed-on: http://review.whamcloud.com/9841
Reviewed-by: John L. Hammond 
Reviewed-by: Bob Glossman 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c 
b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
index a38d343..d7e165f 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
@@ -464,6 +464,9 @@ static int lmv_intent_lookup(struct obd_export *exp,
return PTR_ERR(tgt);
 
ptlrpc_req_finished(*reqp);
+   it->it_request = NULL;
+   *reqp = NULL;
+
CDEBUG(D_INODE, "For migrating dir, try target dir "DFID"\n",
   PFID(>lsm_md_oinfo[1].lmo_fid));
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 09/80] staging: lustre: lmv: change handling of lmv striping information

2016-08-16 Thread James Simmons
From: wang di 

The lmv_[un]pack_md function are used to calculate the
size of the data used to represent the LMV striping data.
The original code was straight forward in its calculate
with lmv_get_easize since only one type of data format
could exist. We want to be able to support different
version of this data in the future so this patch moves
to generating the size of the data using the stripe count
and which LMV_MAGIC_* version.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |4 -
 drivers/staging/lustre/lustre/include/lustre_lmv.h |   15 +-
 drivers/staging/lustre/lustre/lmv/lmv_internal.h   |7 +
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|  245 +++-
 4 files changed, 198 insertions(+), 73 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 5f31724..0ad6605 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2482,10 +2482,6 @@ struct lmv_desc {
struct obd_uuid ld_uuid;
 };
 
-#define MEA_MAGIC_LAST_CHAR  0xb2221ca1
-#define MEA_MAGIC_ALL_CHARS  0xb222a11c
-#define MEA_MAGIC_HASH_SEGMENT   0xb222a11b
-
 /* lmv structures */
 #define LMV_MAGIC_V1   0x0CD10CD0  /* normal stripe lmv magic */
 #define LMV_USER_MAGIC 0x0CD20CD0  /* default lmv magic*/
diff --git a/drivers/staging/lustre/lustre/include/lustre_lmv.h 
b/drivers/staging/lustre/lustre/include/lustre_lmv.h
index 0620c8c..784d67b 100644
--- a/drivers/staging/lustre/lustre/include/lustre_lmv.h
+++ b/drivers/staging/lustre/lustre/include/lustre_lmv.h
@@ -41,12 +41,15 @@ struct lmv_oinfo {
 };
 
 struct lmv_stripe_md {
-   __u32   mea_magic;
-   __u32   mea_count;
-   __u32   mea_master;
-   __u32   mea_padding;
-   charmea_pool_name[LOV_MAXPOOLNAME];
-   struct lu_fid mea_ids[0];
+   __u32   lsm_md_magic;
+   __u32   lsm_md_stripe_count;
+   __u32   lsm_md_master_mdt_index;
+   __u32   lsm_md_hash_type;
+   __u32   lsm_md_layout_version;
+   __u32   lsm_md_default_count;
+   __u32   lsm_md_default_index;
+   charlsm_md_pool_name[LOV_MAXPOOLNAME];
+   struct lmv_oinfo lsm_md_oinfo[0];
 };
 
 union lmv_mds_md;
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h 
b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
index ab01560..90a9786 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h
+++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h
@@ -94,6 +94,13 @@ lmv_find_target(struct lmv_obd *lmv, const struct lu_fid 
*fid)
return lmv_get_target(lmv, mds);
 }
 
+static inline int lmv_stripe_md_size(int stripe_count)
+{
+   struct lmv_stripe_md *lsm;
+
+   return sizeof(*lsm) + stripe_count * sizeof(lsm->lsm_md_oinfo[0]);
+}
+
 struct lmv_tgt_desc
 *lmv_locate_mds(struct lmv_obd *lmv, struct md_op_data *op_data,
struct lu_fid *fid);
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 8e83263..1ba5900 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -2376,105 +2376,224 @@ static int lmv_set_info_async(const struct lu_env 
*env, struct obd_export *exp,
return -EINVAL;
 }
 
-static int lmv_packmd(struct obd_export *exp, struct lov_mds_md **lmmp,
- struct lov_stripe_md *lsm)
+static int lmv_pack_md_v1(const struct lmv_stripe_md *lsm,
+ struct lmv_mds_md_v1 *lmm1)
 {
-   struct obd_device*obd = class_exp2obd(exp);
-   struct lmv_obd  *lmv = >u.lmv;
-   struct lmv_stripe_md  *meap;
-   struct lmv_stripe_md  *lsmp;
-   int mea_size;
-   int i;
+   int cplen;
+   int i;
+
+   lmm1->lmv_magic = cpu_to_le32(lsm->lsm_md_magic);
+   lmm1->lmv_stripe_count = cpu_to_le32(lsm->lsm_md_stripe_count);
+   lmm1->lmv_master_mdt_index = cpu_to_le32(lsm->lsm_md_master_mdt_index);
+   lmm1->lmv_hash_type = cpu_to_le32(lsm->lsm_md_hash_type);
+   cplen = strlcpy(lmm1->lmv_pool_name, lsm->lsm_md_pool_name,
+   sizeof(lmm1->lmv_pool_name));
+   if (cplen >= sizeof(lmm1->lmv_pool_name))
+   return -E2BIG;
+
+   for (i = 0; i < lsm->lsm_md_stripe_count; i++)
+   fid_cpu_to_le(>lmv_stripe_fids[i],
+ >lsm_md_oinfo[i].lmo_fid);
+   

[PATCH 32/80] staging: lustre: lov: handle the case of stripe size is not power 2

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

Calculate the end of current stripe correctly when the stripe size
is not power 2.

Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4860
Reviewed-on: http://review.whamcloud.com/9882
Reviewed-by: Bobi Jam 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lov/lov_page.c |   11 +--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lov/lov_page.c 
b/drivers/staging/lustre/lustre/lov/lov_page.c
index c17026f..45b5ae9 100644
--- a/drivers/staging/lustre/lustre/lov/lov_page.c
+++ b/drivers/staging/lustre/lustre/lov/lov_page.c
@@ -65,7 +65,9 @@ static int lov_raid0_page_is_under_lock(const struct lu_env 
*env,
pgoff_t index = *max_index;
unsigned int pps; /* pages per stripe */
 
-   CDEBUG(D_READA, "*max_index = %lu, nr = %d\n", index, r0->lo_nr);
+   CDEBUG(D_READA, DFID "*max_index = %lu, nr = %d\n",
+  PFID(lu_object_fid(lov2lu(loo))), index, r0->lo_nr);
+
if (index == 0) /* the page is not covered by any lock */
return 0;
 
@@ -80,7 +82,12 @@ static int lov_raid0_page_is_under_lock(const struct lu_env 
*env,
 
/* calculate the end of current stripe */
pps = loo->lo_lsm->lsm_stripe_size >> PAGE_SHIFT;
-   index = ((slice->cpl_index + pps) & ~(pps - 1)) - 1;
+   index = slice->cpl_index + pps - slice->cpl_index % pps - 1;
+
+   CDEBUG(D_READA, DFID "*max_index = %lu, index = %lu, pps = %u, 
stripe_size = %u, stripe no = %u, page index = %lu\n",
+  PFID(lu_object_fid(lov2lu(loo))), *max_index, index, pps,
+  loo->lo_lsm->lsm_stripe_size, lov_page_stripe(slice->cpl_page),
+  slice->cpl_index);
 
/* never exceed the end of the stripe */
*max_index = min_t(pgoff_t, *max_index, index);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 31/80] staging: lustre: llite: avoid a deadlock in page write

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

For a partial page write, it will have to issue a READ RPC firstly
to get a full uptodate page. If another page is already locked by
this thread it can easily cause deadlock.

Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4873
Reviewed-on: http://review.whamcloud.com/9928
Reviewed-by: Bobi Jam 
Reviewed-by: Niu Yawei 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/rw26.c |5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/rw26.c 
b/drivers/staging/lustre/lustre/llite/rw26.c
index d98c7ac..c14a1b6 100644
--- a/drivers/staging/lustre/lustre/llite/rw26.c
+++ b/drivers/staging/lustre/lustre/llite/rw26.c
@@ -506,8 +506,9 @@ static int ll_write_begin(struct file *file, struct 
address_space *mapping,
env = lcc->lcc_env;
io  = lcc->lcc_io;
 
-   /* To avoid deadlock, try to lock page first. */
-   vmpage = grab_cache_page_nowait(mapping, index);
+   if (likely(to == PAGE_SIZE)) /* LU-4873 */
+   /* To avoid deadlock, try to lock page first. */
+   vmpage = grab_cache_page_nowait(mapping, index);
if (unlikely(!vmpage || PageDirty(vmpage) || PageWriteback(vmpage))) {
struct vvp_io *vio = vvp_env_io(env);
struct cl_page_list *plist = >u.write.vui_queue;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 26/80] staging: lustre: use bool for several function in lustre_idl.h/lustre_fid.h

2016-08-16 Thread James Simmons
From: John L. Hammond 

Change the return type of several predicate functions from int to bool.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2675
Reviewed-on: http://review.whamcloud.com/8641
Reviewed-by: wangdi 
Reviewed-by: Fan Yong 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   72 ++--
 drivers/staging/lustre/lustre/include/lustre_fid.h |4 +-
 2 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index c932e20..d3a9db9 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -196,12 +196,12 @@ static inline unsigned fld_range_type(const struct 
lu_seq_range *range)
return range->lsr_flags & LU_SEQ_RANGE_MASK;
 }
 
-static inline int fld_range_is_ost(const struct lu_seq_range *range)
+static inline bool fld_range_is_ost(const struct lu_seq_range *range)
 {
return fld_range_type(range) == LU_SEQ_RANGE_OST;
 }
 
-static inline int fld_range_is_mdt(const struct lu_seq_range *range)
+static inline bool fld_range_is_mdt(const struct lu_seq_range *range)
 {
return fld_range_type(range) == LU_SEQ_RANGE_MDT;
 }
@@ -260,23 +260,23 @@ static inline void range_init(struct lu_seq_range *range)
  * check if given seq id \a s is within given range \a r
  */
 
-static inline int range_within(const struct lu_seq_range *range,
-  __u64 s)
+static inline bool range_within(const struct lu_seq_range *range,
+   __u64 s)
 {
return s >= range->lsr_start && s < range->lsr_end;
 }
 
-static inline int range_is_sane(const struct lu_seq_range *range)
+static inline bool range_is_sane(const struct lu_seq_range *range)
 {
return (range->lsr_end >= range->lsr_start);
 }
 
-static inline int range_is_zero(const struct lu_seq_range *range)
+static inline bool range_is_zero(const struct lu_seq_range *range)
 {
return (range->lsr_start == 0 && range->lsr_end == 0);
 }
 
-static inline int range_is_exhausted(const struct lu_seq_range *range)
+static inline bool range_is_exhausted(const struct lu_seq_range *range)
 
 {
return range_space(range) == 0;
@@ -437,69 +437,69 @@ enum dot_lustre_oid {
FID_OID_DOT_LUSTRE_OBF = 2UL,
 };
 
-static inline int fid_seq_is_mdt0(__u64 seq)
+static inline bool fid_seq_is_mdt0(__u64 seq)
 {
return (seq == FID_SEQ_OST_MDT0);
 }
 
-static inline int fid_seq_is_mdt(__u64 seq)
+static inline bool fid_seq_is_mdt(__u64 seq)
 {
return seq == FID_SEQ_OST_MDT0 || seq >= FID_SEQ_NORMAL;
 };
 
-static inline int fid_seq_is_echo(__u64 seq)
+static inline bool fid_seq_is_echo(__u64 seq)
 {
return (seq == FID_SEQ_ECHO);
 }
 
-static inline int fid_is_echo(const struct lu_fid *fid)
+static inline bool fid_is_echo(const struct lu_fid *fid)
 {
return fid_seq_is_echo(fid_seq(fid));
 }
 
-static inline int fid_seq_is_llog(__u64 seq)
+static inline bool fid_seq_is_llog(__u64 seq)
 {
return (seq == FID_SEQ_LLOG);
 }
 
-static inline int fid_is_llog(const struct lu_fid *fid)
+static inline bool fid_is_llog(const struct lu_fid *fid)
 {
/* file with OID == 0 is not llog but contains last oid */
return fid_seq_is_llog(fid_seq(fid)) && fid_oid(fid) > 0;
 }
 
-static inline int fid_seq_is_rsvd(__u64 seq)
+static inline bool fid_seq_is_rsvd(__u64 seq)
 {
return (seq > FID_SEQ_OST_MDT0 && seq <= FID_SEQ_RSVD);
 };
 
-static inline int fid_seq_is_special(__u64 seq)
+static inline bool fid_seq_is_special(__u64 seq)
 {
return seq == FID_SEQ_SPECIAL;
 };
 
-static inline int fid_seq_is_local_file(__u64 seq)
+static inline bool fid_seq_is_local_file(__u64 seq)
 {
return seq == FID_SEQ_LOCAL_FILE ||
   seq == FID_SEQ_LOCAL_NAME;
 };
 
-static inline int fid_seq_is_root(__u64 seq)
+static inline bool fid_seq_is_root(__u64 seq)
 {
return seq == FID_SEQ_ROOT;
 }
 
-static inline int fid_seq_is_dot(__u64 seq)
+static inline bool fid_seq_is_dot(__u64 seq)
 {
return seq == FID_SEQ_DOT_LUSTRE;
 }
 
-static inline int fid_seq_is_default(__u64 seq)
+static inline bool fid_seq_is_default(__u64 seq)
 {
return seq == FID_SEQ_LOV_DEFAULT;
 }
 
-static inline int fid_is_mdt0(const struct lu_fid *fid)
+static inline bool fid_is_mdt0(const struct lu_fid *fid)
 {
return fid_seq_is_mdt0(fid_seq(fid));
 }
@@ -516,12 +516,12 @@ static inline void lu_root_fid(struct lu_fid *fid)
  * \param fid the fid to be tested.
  * \return true if the fid is a igif; otherwise false.
  */
-static inline int fid_seq_is_igif(__u64 seq)
+static inline bool 

[PATCH 20/80] staging: lustre: llite: enable clients to inject error for lfsck

2016-08-16 Thread James Simmons
From: Fan Yong 

This enables the client to inject an error by altering
the parent FID in order to test if the server side file
system checker behaves properly.

Signed-off-by: Fan Yong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3951
Reviewed-on: http://review.whamcloud.com/7667
Reviewed-by: Andreas Dilger 
Reviewed-by: Alex Zhuravlev 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lustre/include/obd_support.h|1 +
 drivers/staging/lustre/lustre/llite/vvp_req.c  |2 ++
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/obd_support.h 
b/drivers/staging/lustre/lustre/include/obd_support.h
index 845e64a..71bf844 100644
--- a/drivers/staging/lustre/lustre/include/obd_support.h
+++ b/drivers/staging/lustre/lustre/include/obd_support.h
@@ -474,6 +474,7 @@ extern char obd_jobid_var[];
 #define OBD_FAIL_LFSCK_CRASH   0x160a
 #define OBD_FAIL_LFSCK_NO_AUTO 0x160b
 #define OBD_FAIL_LFSCK_NO_DOUBLESCAN   0x160c
+#define OBD_FAIL_LFSCK_INVALID_PFID0x1619
 
 /* UPDATE */
 #define OBD_FAIL_UPDATE_OBJ_NET0x1700
diff --git a/drivers/staging/lustre/lustre/llite/vvp_req.c 
b/drivers/staging/lustre/lustre/llite/vvp_req.c
index 9fe9d6c..0567a15 100644
--- a/drivers/staging/lustre/lustre/llite/vvp_req.c
+++ b/drivers/staging/lustre/lustre/llite/vvp_req.c
@@ -83,6 +83,8 @@ static void vvp_req_attr_set(const struct lu_env *env,
}
obdo_from_inode(oa, inode, valid_flags & flags);
obdo_set_parent_fid(oa, _i2info(inode)->lli_fid);
+   if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_INVALID_PFID))
+   oa->o_parent_oid++;
memcpy(attr->cra_jobid, ll_i2info(inode)->lli_jobid,
   JOBSTATS_JOBID_SIZE);
 }
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 46/80] staging: lustre: llite: Change readdir BRW metrics

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

To simplify the code, change the metrics from bytes to pages.

Signed-off-by: Andreas Dilger 
Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5034
Reviewed-on: http://review.whamcloud.com/10275
Reviewed-by: wangdi 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c  |2 +-
 .../staging/lustre/lustre/llite/llite_internal.h   |2 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c|4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 47fbcd2..924b5df 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -148,7 +148,7 @@ static int ll_dir_filler(void *_hash, struct page *page0)
struct page **page_pool;
struct page *page;
struct lu_dirpage *dp;
-   int max_pages = ll_i2sbi(inode)->ll_md_brw_size >> PAGE_SHIFT;
+   int max_pages = ll_i2sbi(inode)->ll_md_brw_pages;
int nrdpgs = 0; /* number of pages read actually */
int npages;
int i;
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index 500b5ec..3d7fa9a 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -474,7 +474,7 @@ struct ll_sb_info {
unsigned int  ll_namelen;
struct file_operations   *ll_fop;
 
-   unsigned int  ll_md_brw_size; /* used by readdir */
+   unsigned int  ll_md_brw_pages; /* readdir pages per RPC */
 
struct lu_site *ll_site;
struct cl_device *ll_cl;
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c 
b/drivers/staging/lustre/lustre/llite/llite_lib.c
index 0a28925..ac59cd6 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -319,9 +319,9 @@ static int client_common_fill_super(struct super_block *sb, 
char *md, char *dt,
sbi->ll_flags |= LL_SBI_64BIT_HASH;
 
if (data->ocd_connect_flags & OBD_CONNECT_BRW_SIZE)
-   sbi->ll_md_brw_size = data->ocd_brw_size;
+   sbi->ll_md_brw_pages = data->ocd_brw_size >> PAGE_SHIFT;
else
-   sbi->ll_md_brw_size = PAGE_SIZE;
+   sbi->ll_md_brw_pages = 1;
 
if (data->ocd_connect_flags & OBD_CONNECT_LAYOUTLOCK)
sbi->ll_flags |= LL_SBI_LAYOUT_LOCK;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 36/80] staging: lustre: reorder LOV_MAGIC_* definition

2016-08-16 Thread James Simmons
From: Fan Yong 

Since all the LOV_MAGIC_* definitions have the same
postfix values break that value out into its own
definition. With this we can check whether the magic's
postfix match the LOV_MAGIC_MAGIC or not: if yes,
then it is quite possible that the clients has
encountered an newer LOV magic. This extra information
can let us handle those cases more gracefully.

Signed-off-by: Fan Yong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4941
Reviewed-on: http://review.whamcloud.com/10045
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   20 +++-
 1 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index d3a9db9..3444add 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1478,11 +1478,21 @@ enum obdo_flags {
OBD_FL_LOCAL_MASK   = 0xF000,
 };
 
-#define LOV_MAGIC_V1  0x0BD10BD0
-#define LOV_MAGIC   LOV_MAGIC_V1
-#define LOV_MAGIC_JOIN_V1 0x0BD20BD0
-#define LOV_MAGIC_V3  0x0BD30BD0
-#define LOV_MAGIC_MIGRATE 0x0BD40BD0
+/*
+ * All LOV EA magics should have the same postfix, if some new version
+ * Lustre instroduces new LOV EA magic, then when down-grade to an old
+ * Lustre, even though the old version system does not recognizes such
+ * new magic, it still can distinguish the corrupted cases by checking
+ * the magic's postfix.
+ */
+#define LOV_MAGIC_MAGIC 0x0BD0
+#define LOV_MAGIC_MASK  0x
+
+#define LOV_MAGIC_V1   (0x0BD1 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_JOIN_V1  (0x0BD2 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_V3   (0x0BD3 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_MIGRATE  (0x0BD4 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC  LOV_MAGIC_V1
 
 /*
  * magic for fully defined striping
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 34/80] staging: lustre: lmv: rename request to preq in lmv_getattr_name()

2016-08-16 Thread James Simmons
From: John L. Hammond 

Rename request to preq.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4826
Reviewed-on: http://review.whamcloud.com/9863
Reviewed-by: Nathaniel Clark 
Reviewed-by: Bob Glossman 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c |   16 +++-
 1 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index f1b8ae9..d07fd17 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -1883,7 +1883,7 @@ lmv_enqueue(struct obd_export *exp, struct 
ldlm_enqueue_info *einfo,
 
 static int
 lmv_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
-struct ptlrpc_request **request)
+struct ptlrpc_request **preq)
 {
struct ptlrpc_request   *req = NULL;
struct obd_device   *obd = exp->exp_obd;
@@ -1904,13 +1904,11 @@ lmv_getattr_name(struct obd_export *exp, struct 
md_op_data *op_data,
   op_data->op_namelen, op_data->op_name, PFID(_data->op_fid1),
   tgt->ltd_idx);
 
-   rc = md_getattr_name(tgt->ltd_exp, op_data, request);
+   rc = md_getattr_name(tgt->ltd_exp, op_data, preq);
if (rc != 0)
return rc;
 
-   body = req_capsule_server_get(&(*request)->rq_pill,
- _MDT_BODY);
-
+   body = req_capsule_server_get(&(*preq)->rq_pill, _MDT_BODY);
if (body->valid & OBD_MD_MDS) {
struct lu_fid rid = body->fid1;
 
@@ -1919,8 +1917,8 @@ lmv_getattr_name(struct obd_export *exp, struct 
md_op_data *op_data,
 
tgt = lmv_find_target(lmv, );
if (IS_ERR(tgt)) {
-   ptlrpc_req_finished(*request);
-   *request = NULL;
+   ptlrpc_req_finished(*preq);
+   *preq = NULL;
return PTR_ERR(tgt);
}
 
@@ -1929,8 +1927,8 @@ lmv_getattr_name(struct obd_export *exp, struct 
md_op_data *op_data,
op_data->op_namelen = 0;
op_data->op_name = NULL;
rc = md_getattr_name(tgt->ltd_exp, op_data, );
-   ptlrpc_req_finished(*request);
-   *request = req;
+   ptlrpc_req_finished(*preq);
+   *preq = req;
}
 
return rc;
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 05/80] staging: lustre: llite: change remove parameter to bool

2016-08-16 Thread James Simmons
From: wang di 

Change the 3rd parameter remove to a bool for ll_release_page
function.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c  |   10 +-
 .../staging/lustre/lustre/llite/llite_internal.h   |2 +-
 drivers/staging/lustre/lustre/llite/statahead.c|   10 +-
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 3a800b2..a72b486 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -236,7 +236,7 @@ static int ll_dir_filler(void *_hash, struct page *page0)
return rc;
 }
 
-void ll_release_page(struct inode *inode, struct page *page, int remove)
+void ll_release_page(struct inode *inode, struct page *page, bool remove)
 {
kunmap(page);
if (remove) {
@@ -297,7 +297,7 @@ static struct page *ll_dir_page_locate(struct inode *dir, 
__u64 *hash,
CDEBUG(D_VFSTRACE, "page %lu [%llu %llu], hash %llu\n",
   offset, *start, *end, *hash);
if (*hash > *end) {
-   ll_release_page(dir, page, 0);
+   ll_release_page(dir, page, false);
page = NULL;
} else if (*end != *start && *hash == *end) {
/*
@@ -463,7 +463,7 @@ out_unlock:
return page;
 
 fail:
-   ll_release_page(dir, page, 1);
+   ll_release_page(dir, page, true);
page = ERR_PTR(-EIO);
goto out_unlock;
 }
@@ -561,7 +561,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 
if (done) {
pos = hash;
-   ll_release_page(inode, page, 0);
+   ll_release_page(inode, page, false);
break;
}
 
@@ -572,7 +572,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 * End of directory reached.
 */
done = 1;
-   ll_release_page(inode, page, 0);
+   ll_release_page(inode, page, false);
} else {
/*
 * Normal case: continue to the next
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h 
b/drivers/staging/lustre/lustre/llite/llite_internal.h
index 4b03a64..07b6918 100644
--- a/drivers/staging/lustre/lustre/llite/llite_internal.h
+++ b/drivers/staging/lustre/lustre/llite/llite_internal.h
@@ -655,7 +655,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
 int ll_get_mdt_idx(struct inode *inode);
 struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
 __u64 hash, struct ll_dir_chain *chain);
-void ll_release_page(struct inode *inode, struct page *page, int remove);
+void ll_release_page(struct inode *inode, struct page *page, bool remove);
 
 /* llite/namei.c */
 extern const struct inode_operations ll_special_inode_operations;
diff --git a/drivers/staging/lustre/lustre/llite/statahead.c 
b/drivers/staging/lustre/lustre/llite/statahead.c
index 2949ff6..6ce7442 100644
--- a/drivers/staging/lustre/lustre/llite/statahead.c
+++ b/drivers/staging/lustre/lustre/llite/statahead.c
@@ -1142,7 +1142,7 @@ interpret_it:
ll_post_statahead(sai);
 
if (unlikely(!thread_is_running(thread))) {
-   ll_release_page(dir, page, 0);
+   ll_release_page(dir, page, false);
rc = 0;
goto out;
}
@@ -1166,7 +1166,7 @@ interpret_it:
 
if (unlikely(
!thread_is_running(thread))) {
-   ll_release_page(dir, page, 0);
+   ll_release_page(dir, page, 
false);
rc = 0;
goto out;
}
@@ -1189,7 +1189,7 @@ do_it:
/*
 * End of directory reached.
 */
-   ll_release_page(dir, page, 0);
+   

[PATCH 21/80] staging: lustre: osc: allow to call brw_commit() multiple times

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

Sometimes the rq_commit_cb of BRW RPC can be called twice if that RPC
has already committed at reply time. This will cause inaccuracy of
unstable pages accounting and then assertion.

Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3274
Reviewed-on: http://review.whamcloud.com/8215
Reviewed-by: Prakash Surya 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/osc/osc_cache.c   |   19 ---
 drivers/staging/lustre/lustre/osc/osc_request.c |8 
 2 files changed, 8 insertions(+), 19 deletions(-)

diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c 
b/drivers/staging/lustre/lustre/osc/osc_cache.c
index 53b5d73..683b3c2 100644
--- a/drivers/staging/lustre/lustre/osc/osc_cache.c
+++ b/drivers/staging/lustre/lustre/osc/osc_cache.c
@@ -1875,11 +1875,6 @@ void osc_dec_unstable_pages(struct ptlrpc_request *req)
atomic_sub(page_count, _unstable_pages);
LASSERT(atomic_read(_unstable_pages) >= 0);
 
-   spin_lock(>rq_lock);
-   req->rq_committed = 1;
-   req->rq_unstable  = 0;
-   spin_unlock(>rq_lock);
-
wake_up_all(>cl_cache->ccc_unstable_waitq);
 }
 
@@ -1909,27 +1904,21 @@ void osc_inc_unstable_pages(struct ptlrpc_request *req)
LASSERT(atomic_read(_unstable_pages) >= 0);
atomic_add(page_count, _unstable_pages);
 
-   spin_lock(>rq_lock);
-
/*
 * If the request has already been committed (i.e. brw_commit
 * called via rq_commit_cb), we need to undo the unstable page
 * increments we just performed because rq_commit_cb wont be
-* called again. Otherwise, just set the commit callback so the
-* unstable page accounting is properly updated when the request
-* is committed
+* called again.
 */
-   if (req->rq_committed) {
+   spin_lock(>rq_lock);
+   if (unlikely(req->rq_committed)) {
/* Drop lock before calling osc_dec_unstable_pages */
spin_unlock(>rq_lock);
osc_dec_unstable_pages(req);
-   spin_lock(>rq_lock);
} else {
req->rq_unstable = 1;
-   req->rq_commit_cb = osc_dec_unstable_pages;
+   spin_unlock(>rq_lock);
}
-
-   spin_unlock(>rq_lock);
 }
 
 /* this must be called holding the loi list lock to give coverage to 
exit_cache,
diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c 
b/drivers/staging/lustre/lustre/osc/osc_request.c
index 536b868..a2d948f 100644
--- a/drivers/staging/lustre/lustre/osc/osc_request.c
+++ b/drivers/staging/lustre/lustre/osc/osc_request.c
@@ -1847,21 +1847,21 @@ static int brw_interpret(const struct lu_env *env,
 
 static void brw_commit(struct ptlrpc_request *req)
 {
-   spin_lock(>rq_lock);
/*
 * If osc_inc_unstable_pages (via osc_extent_finish) races with
 * this called via the rq_commit_cb, I need to ensure
 * osc_dec_unstable_pages is still called. Otherwise unstable
 * pages may be leaked.
 */
-   if (req->rq_unstable) {
+   spin_lock(>rq_lock);
+   if (unlikely(req->rq_unstable)) {
+   req->rq_unstable = 0;
spin_unlock(>rq_lock);
osc_dec_unstable_pages(req);
-   spin_lock(>rq_lock);
} else {
req->rq_committed = 1;
+   spin_unlock(>rq_lock);
}
-   spin_unlock(>rq_lock);
 }
 
 /**
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 02/80] staging: lustre: llite: remove comment from ll_dir_read

2016-08-16 Thread James Simmons
From: wang di 

Remove comment about fixing swabbing that is not needed.

Signed-off-by: wang di 
Reviewed-on: http://review.whamcloud.com/7043
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531
Reviewed-by: John L. Hammond 
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/dir.c |4 
 1 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/dir.c 
b/drivers/staging/lustre/lustre/llite/dir.c
index 82c7f88..d854edd 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -526,10 +526,6 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct 
md_op_data *op_data,
__u64 lhash;
__u64 ino;
 
-   /*
-* XXX: implement correct swabbing here.
-*/
-
hash = le64_to_cpu(ent->lde_hash);
if (hash < pos)
/*
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/80] staging: lustre: create striped directory

2016-08-16 Thread James Simmons
From: wang di 

1. client send create request to the master MDT, which
  will allocate FIDs and create slaves. for all of slaves.

2. Client needs to revalidate slaves during intent getattr
   and open request.

3. lmv_stripe_md will include attributes(size, nlink etc)
   from all of stripe, which will be protected by UPDATE lock.
   client needs to merge these attributes when update inode.

4. send create request to the MDT where the file is located,
   which can help creating master stripe of striped directory.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3529
Reviewed-on: http://review.whamcloud.com/7196
Reviewed-by: Andreas Dilger 
Reviewed-by: John L. Hammond 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/cl_object.h  |3 +
 .../lustre/lustre/include/lustre/lustre_idl.h  |   40 +++-
 .../lustre/lustre/include/lustre/lustre_user.h |   16 +-
 drivers/staging/lustre/lustre/include/lustre_lib.h |2 +
 drivers/staging/lustre/lustre/include/lustre_lmv.h |   59 +
 drivers/staging/lustre/lustre/include/obd.h|   16 +-
 drivers/staging/lustre/lustre/include/obd_class.h  |   19 ++
 drivers/staging/lustre/lustre/llite/dir.c  |   26 ++-
 drivers/staging/lustre/lustre/llite/file.c |   40 +++-
 .../staging/lustre/lustre/llite/llite_internal.h   |   12 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c|  193 +++-
 drivers/staging/lustre/lustre/llite/llite_nfs.c|7 +-
 drivers/staging/lustre/lustre/llite/namei.c|   42 +++-
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |  244 +---
 drivers/staging/lustre/lustre/lmv/lmv_internal.h   |   32 +++
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|  221 +++---
 drivers/staging/lustre/lustre/mdc/mdc_locks.c  |3 +
 .../staging/lustre/lustre/ptlrpc/pack_generic.c|   11 +
 18 files changed, 880 insertions(+), 106 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/cl_object.h 
b/drivers/staging/lustre/lustre/include/cl_object.h
index 3cd4a25..0fa71a5 100644
--- a/drivers/staging/lustre/lustre/include/cl_object.h
+++ b/drivers/staging/lustre/lustre/include/cl_object.h
@@ -191,6 +191,9 @@ struct cl_attr {
 * Group identifier for quota purposes.
 */
gid_t  cat_gid;
+
+   /* nlink of the directory */
+   __u64  cat_nlink;
 };
 
 /**
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 0ad6605..a612080 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1610,6 +1610,7 @@ static inline void lmm_oi_cpu_to_le(struct ost_id *dst_oi,
 #define XATTR_NAME_LOV   "trusted.lov"
 #define XATTR_NAME_LMA   "trusted.lma"
 #define XATTR_NAME_LMV   "trusted.lmv"
+#define XATTR_NAME_DEFAULT_LMV "trusted.dmv"
 #define XATTR_NAME_LINK "trusted.link"
 #define XATTR_NAME_FID   "trusted.fid"
 #define XATTR_NAME_VERSION  "trusted.version"
@@ -2472,7 +2473,7 @@ struct lmv_desc {
__u32 ld_tgt_count; /* how many MDS's */
__u32 ld_active_tgt_count;   /* how many active */
__u32 ld_default_stripe_count; /* how many objects are used */
-   __u32 ld_pattern; /* default MEA_MAGIC_* */
+   __u32 ld_pattern; /* default hash pattern */
__u64 ld_default_hash_size;
__u64 ld_padding_1; /* also fix lustre_swab_lmv_desc */
__u32 ld_padding_2; /* also fix lustre_swab_lmv_desc */
@@ -2486,6 +2487,43 @@ struct lmv_desc {
 #define LMV_MAGIC_V1   0x0CD10CD0  /* normal stripe lmv magic */
 #define LMV_USER_MAGIC 0x0CD20CD0  /* default lmv magic*/
 #define LMV_MAGIC  LMV_MAGIC_V1
+
+enum lmv_hash_type {
+   LMV_HASH_TYPE_ALL_CHARS = 1,
+   LMV_HASH_TYPE_FNV_1A_64 = 2,
+};
+
+#define LMV_HASH_NAME_ALL_CHARS"all_char"
+#define LMV_HASH_NAME_FNV_1A_64"fnv_1a_64"
+
+/**
+ * The FNV-1a hash algorithm is as follows:
+ * hash = FNV_offset_basis
+ * for each octet_of_data to be hashed
+ * hash = hash XOR octet_of_data
+ * hash = hash × FNV_prime
+ * return hash
+ * http://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function#FNV-1a_hash
+ *
+ * http://www.isthe.com/chongo/tech/comp/fnv/index.html#FNV-reference-source
+ * FNV_prime is 2^40 + 2^8 + 0xb3 = 0x10001b3ULL
+ **/
+#define LUSTRE_FNV_1A_64_PRIME 0x10001b3ULL
+#define LUSTRE_FNV_1A_64_OFFSET_BIAS   0xcbf29ce484222325ULL
+static inline __u64 lustre_hash_fnv_1a_64(const void *buf, size_t size)
+{
+   __u64 hash = LUSTRE_FNV_1A_64_OFFSET_BIAS;
+   const unsigned char *p = buf;
+   size_t i;
+
+   for (i = 0; i < size; 

[PATCH 24/80] staging: lustre: don't need to const __u64 parameters for lustre_idl.h

2016-08-16 Thread James Simmons
From: John L. Hammond 

Remove the const for the __u64 parameters for inline functions
in lustre_idl.h.

Signed-off-by: John L. Hammond 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-2675
Reviewed-on: http://review.whamcloud.com/8641
Reviewed-by: wangdi 
Reviewed-by: Fan Yong 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   20 ++--
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 6853f62..87e79b9 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -442,7 +442,7 @@ static inline int fid_seq_is_mdt0(__u64 seq)
return (seq == FID_SEQ_OST_MDT0);
 }
 
-static inline int fid_seq_is_mdt(const __u64 seq)
+static inline int fid_seq_is_mdt(__u64 seq)
 {
return seq == FID_SEQ_OST_MDT0 || seq >= FID_SEQ_NORMAL;
 };
@@ -468,33 +468,33 @@ static inline int fid_is_llog(const struct lu_fid *fid)
return fid_seq_is_llog(fid_seq(fid)) && fid_oid(fid) > 0;
 }
 
-static inline int fid_seq_is_rsvd(const __u64 seq)
+static inline int fid_seq_is_rsvd(__u64 seq)
 {
return (seq > FID_SEQ_OST_MDT0 && seq <= FID_SEQ_RSVD);
 };
 
-static inline int fid_seq_is_special(const __u64 seq)
+static inline int fid_seq_is_special(__u64 seq)
 {
return seq == FID_SEQ_SPECIAL;
 };
 
-static inline int fid_seq_is_local_file(const __u64 seq)
+static inline int fid_seq_is_local_file(__u64 seq)
 {
return seq == FID_SEQ_LOCAL_FILE ||
   seq == FID_SEQ_LOCAL_NAME;
 };
 
-static inline int fid_seq_is_root(const __u64 seq)
+static inline int fid_seq_is_root(__u64 seq)
 {
return seq == FID_SEQ_ROOT;
 }
 
-static inline int fid_seq_is_dot(const __u64 seq)
+static inline int fid_seq_is_dot(__u64 seq)
 {
return seq == FID_SEQ_DOT_LUSTRE;
 }
 
-static inline int fid_seq_is_default(const __u64 seq)
+static inline int fid_seq_is_default(__u64 seq)
 {
return seq == FID_SEQ_LOV_DEFAULT;
 }
@@ -516,7 +516,7 @@ static inline void lu_root_fid(struct lu_fid *fid)
  * \param fid the fid to be tested.
  * \return true if the fid is a igif; otherwise false.
  */
-static inline int fid_seq_is_igif(const __u64 seq)
+static inline int fid_seq_is_igif(__u64 seq)
 {
return seq >= FID_SEQ_IGIF && seq <= FID_SEQ_IGIF_MAX;
 }
@@ -531,7 +531,7 @@ static inline int fid_is_igif(const struct lu_fid *fid)
  * \param fid the fid to be tested.
  * \return true if the fid is a idif; otherwise false.
  */
-static inline int fid_seq_is_idif(const __u64 seq)
+static inline int fid_seq_is_idif(__u64 seq)
 {
return seq >= FID_SEQ_IDIF && seq <= FID_SEQ_IDIF_MAX;
 }
@@ -546,7 +546,7 @@ static inline int fid_is_local_file(const struct lu_fid 
*fid)
return fid_seq_is_local_file(fid_seq(fid));
 }
 
-static inline int fid_seq_is_norm(const __u64 seq)
+static inline int fid_seq_is_norm(__u64 seq)
 {
return (seq >= FID_SEQ_NORMAL);
 }
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 67/80] staging: lustre: ptlrpc: request gets stuck in UNREGISTERING phase

2016-08-16 Thread James Simmons
From: Andriy Skulysh 

Exit condition from UNREGISTERING phase is releasing of
both reply and bulk buffers.

Call ptlrpc_unregister_bulk() if ptlrpc_unregister_reply()
wasn't completed in async mode before switching to
UNREGISTERING phase.

Signed-off-by: Andriy Skulysh 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5259
Xyratex-bug-id: MRP-1960
Reviewed-on: http://review.whamcloud.com/10846
Reviewed-by: Andreas Dilger 
Reviewed-by: Ann Koehler 
Reviewed-by: Liang Zhen 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/ptlrpc/client.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c 
b/drivers/staging/lustre/lustre/ptlrpc/client.c
index f2e71b4..bae91bd 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/client.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/client.c
@@ -1630,8 +1630,10 @@ int ptlrpc_check_set(const struct lu_env *env, struct 
ptlrpc_request_set *set)
req->rq_waiting || req->rq_wait_ctx) {
int status;
 
-   if (!ptlrpc_unregister_reply(req, 1))
+   if (!ptlrpc_unregister_reply(req, 1)) {
+   ptlrpc_unregister_bulk(req, 1);
continue;
+   }
 
spin_lock(>imp_lock);
if (ptlrpc_import_delay_req(imp, req,
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 57/80] staging: lustre: osc: revise unstable pages accounting

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

A few changes are made in this patch for unstable pages tracking:

1. Remove kernel NFS unstable pages tracking because it killed
   performance
2. Track unstable pages as part of LRU cache. Otherwise Lustre
   can use much more memory than max_cached_mb
3. Remove obd_unstable_pages tracking to avoid using global
   atomic counter
4. Make unstable pages track optional. Tracking unstable pages is
   turned off by default, and can be controlled by
   llite.*.unstable_stats.

Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4841
Reviewed-on: http://review.whamcloud.com/10003
Reviewed-by: Andreas Dilger 
Reviewed-by: Lai Siyao 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/cl_object.h  |   35 +++-
 .../staging/lustre/lustre/include/obd_support.h|1 -
 drivers/staging/lustre/lustre/llite/lproc_llite.c  |   41 -
 drivers/staging/lustre/lustre/obdclass/class_obd.c |2 -
 drivers/staging/lustre/lustre/osc/osc_cache.c  |   96 +-
 drivers/staging/lustre/lustre/osc/osc_internal.h   |2 +-
 drivers/staging/lustre/lustre/osc/osc_page.c   |  208 +---
 drivers/staging/lustre/lustre/osc/osc_request.c|   13 +-
 8 files changed, 253 insertions(+), 145 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/cl_object.h 
b/drivers/staging/lustre/lustre/include/cl_object.h
index d269b32..ec6cf7c 100644
--- a/drivers/staging/lustre/lustre/include/cl_object.h
+++ b/drivers/staging/lustre/lustre/include/cl_object.h
@@ -1039,23 +1039,32 @@ do {
  \
}\
 } while (0)
 
-static inline int __page_in_use(const struct cl_page *page, int refc)
-{
-   if (page->cp_type == CPT_CACHEABLE)
-   ++refc;
-   LASSERT(atomic_read(>cp_ref) > 0);
-   return (atomic_read(>cp_ref) > refc);
-}
-
-#define cl_page_in_use(pg)   __page_in_use(pg, 1)
-#define cl_page_in_use_noref(pg) __page_in_use(pg, 0)
-
 static inline struct page *cl_page_vmpage(struct cl_page *page)
 {
LASSERT(page->cp_vmpage);
return page->cp_vmpage;
 }
 
+/**
+ * Check if a cl_page is in use.
+ *
+ * Client cache holds a refcount, this refcount will be dropped when
+ * the page is taken out of cache, see vvp_page_delete().
+ */
+static inline bool __page_in_use(const struct cl_page *page, int refc)
+{
+   return (atomic_read(>cp_ref) > refc + 1);
+}
+
+/**
+ * Caller itself holds a refcount of cl_page.
+ */
+#define cl_page_in_use(pg)  __page_in_use(pg, 1)
+/**
+ * Caller doesn't hold a refcount.
+ */
+#define cl_page_in_use_noref(pg) __page_in_use(pg, 0)
+
 /** @} cl_page */
 
 /** \addtogroup cl_lock cl_lock
@@ -2331,6 +2340,10 @@ struct cl_client_cache {
 */
spinlock_t  ccc_lru_lock;
/**
+* Set if unstable check is enabled
+*/
+   unsigned intccc_unstable_check:1;
+   /**
 * # of unstable pages for this mount point
 */
atomic_tccc_unstable_nr;
diff --git a/drivers/staging/lustre/lustre/include/obd_support.h 
b/drivers/staging/lustre/lustre/include/obd_support.h
index 26fdff6..a11fff1 100644
--- a/drivers/staging/lustre/lustre/include/obd_support.h
+++ b/drivers/staging/lustre/lustre/include/obd_support.h
@@ -54,7 +54,6 @@ extern int at_early_margin;
 extern int at_extra;
 extern unsigned int obd_sync_filter;
 extern unsigned int obd_max_dirty_pages;
-extern atomic_t obd_unstable_pages;
 extern atomic_t obd_dirty_pages;
 extern atomic_t obd_dirty_transit_pages;
 extern char obd_jobid_var[];
diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c 
b/drivers/staging/lustre/lustre/llite/lproc_llite.c
index 2f1f389..5f8e78d 100644
--- a/drivers/staging/lustre/lustre/llite/lproc_llite.c
+++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c
@@ -828,10 +828,45 @@ static ssize_t unstable_stats_show(struct kobject *kobj,
pages = atomic_read(>ccc_unstable_nr);
mb = (pages * PAGE_SIZE) >> 20;
 
-   return sprintf(buf, "unstable_pages: %8d\n"
-   "unstable_mb:%8d\n", pages, mb);
+   return sprintf(buf, "unstable_check: %8d\n"
+   "unstable_pages: %8d\n"
+   "unstable_mb:%8d\n",
+   cache->ccc_unstable_check, pages, mb);
 }
-LUSTRE_RO_ATTR(unstable_stats);
+
+static ssize_t unstable_stats_store(struct kobject *kobj,
+   struct attribute *attr,
+   const char *buffer,
+   size_t count)
+{
+   struct ll_sb_info *sbi = container_of(kobj, struct 

[PATCH 64/80] staging: lustre: ptlrpc: add OBD_CONNECT_UNLINK_CLOSE flag

2016-08-16 Thread James Simmons
From: Lai Siyao 

Add OBD_CONNECT_UNLINK_CLOSE flag for interop, once this is supported,
client packs file handle in unlink RPC, and MDT will close file before
unlink.

Signed-off-by: Lai Siyao 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4367
Reviewed-on: http://review.whamcloud.com/10426
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |1 +
 .../lustre/lustre/obdclass/lprocfs_status.c|2 ++
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|2 ++
 3 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index a9661c0..4a7ccc8 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -1290,6 +1290,7 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb);
 * name in request
 */
 #define OBD_CONNECT_LFSCK  0x40ULL/* support online LFSCK */
+#define OBD_CONNECT_UNLINK_CLOSE 0x100ULL/* close file in unlink */
 
 /* XXX README XXX:
  * Please DO NOT add flag values here before first ensuring that this same
diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c 
b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
index fbb0851..45e3c4a 100644
--- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
+++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
@@ -99,6 +99,8 @@ static const char * const obd_connect_names[] = {
"open_by_fid",
"lfsck",
"unknown",
+   "unlink_close",
+   "unknown",
NULL
 };
 
diff --git a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c 
b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
index 60d03dd..2c718e0 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
@@ -1073,6 +1073,8 @@ void lustre_assert_wire_constants(void)
 "found 0x%.16llxULL\n", OBD_CONNECT_OPEN_BY_FID);
LASSERTF(OBD_CONNECT_LFSCK == 0x40ULL, "found 
0x%.16llxULL\n",
 OBD_CONNECT_LFSCK);
+   LASSERTF(OBD_CONNECT_UNLINK_CLOSE == 0x100ULL, "found 
0x%.16llxULL\n",
+OBD_CONNECT_UNLINK_CLOSE);
LASSERTF(OBD_CKSUM_CRC32 == 0x0001UL, "found 0x%.8xUL\n",
(unsigned)OBD_CKSUM_CRC32);
LASSERTF(OBD_CKSUM_ADLER == 0x0002UL, "found 0x%.8xUL\n",
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 66/80] staging: lustre: lmv: try all stripes for unknown hash functions

2016-08-16 Thread James Simmons
From: wang di 

For unknown hash type, LMV should try all stripes to locate
the name entry. But it will only for lookup and unlink, i.e.
we can only list and unlink entries under striped dir with
unknown hash type.

Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4921
Reviewed-on: http://review.whamcloud.com/10041
Reviewed-by: John L. Hammond 
Reviewed-by: Andreas Dilger 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_user.h |1 +
 .../staging/lustre/lustre/include/obd_support.h|3 +
 drivers/staging/lustre/lustre/lmv/lmv_intent.c |   70 +++---
 drivers/staging/lustre/lustre/lmv/lmv_internal.h   |   12 ++
 drivers/staging/lustre/lustre/lmv/lmv_obd.c|  144 
 5 files changed, 182 insertions(+), 48 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
index 9e38ed3..52cd585 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h
@@ -383,6 +383,7 @@ struct lmv_user_mds_data {
 };
 
 enum lmv_hash_type {
+   LMV_HASH_TYPE_UNKNOWN   = 0,/* 0 is reserved for testing purpose */
LMV_HASH_TYPE_ALL_CHARS = 1,
LMV_HASH_TYPE_FNV_1A_64 = 2,
 };
diff --git a/drivers/staging/lustre/lustre/include/obd_support.h 
b/drivers/staging/lustre/lustre/include/obd_support.h
index a11fff1..f747bca 100644
--- a/drivers/staging/lustre/lustre/include/obd_support.h
+++ b/drivers/staging/lustre/lustre/include/obd_support.h
@@ -483,6 +483,9 @@ extern char obd_jobid_var[];
 #define OBD_FAIL_UPDATE_OBJ_NET0x1700
 #define OBD_FAIL_UPDATE_OBJ_NET_REP0x1701
 
+/* LMV */
+#define OBD_FAIL_UNKNOWN_LMV_STRIPE0x1901
+
 /* Assign references to moved code to reduce code changes */
 #define OBD_FAIL_PRECHECK(id) CFS_FAIL_PRECHECK(id)
 #define OBD_FAIL_CHECK(id)   CFS_FAIL_CHECK(id)
diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c 
b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
index cde1d7b..0559445 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c
@@ -402,10 +402,28 @@ static int lmv_intent_lookup(struct obd_export *exp,
struct mdt_body *body;
int  rc = 0;
 
+   /*
+* If it returns ERR_PTR(-EBADFD) then it is an unknown hash type
+* it will try all stripes to locate the object
+*/
tgt = lmv_locate_mds(lmv, op_data, _data->op_fid1);
-   if (IS_ERR(tgt))
+   if (IS_ERR(tgt) && (PTR_ERR(tgt) != -EBADFD))
return PTR_ERR(tgt);
 
+   /*
+* Both migrating dir and unknown hash dir need to try
+* all of sub-stripes
+*/
+   if (lsm && !lmv_is_known_hash_type(lsm)) {
+   struct lmv_oinfo *oinfo = >lsm_md_oinfo[0];
+
+   op_data->op_fid1 = oinfo->lmo_fid;
+   op_data->op_mds = oinfo->lmo_mds;
+   tgt = lmv_get_target(lmv, oinfo->lmo_mds, NULL);
+   if (IS_ERR(tgt))
+   return PTR_ERR(tgt);
+   }
+
if (!fid_is_sane(_data->op_fid2))
fid_zero(_data->op_fid2);
 
@@ -435,27 +453,39 @@ static int lmv_intent_lookup(struct obd_export *exp,
}
return rc;
} else if (it_disposition(it, DISP_LOOKUP_NEG) && lsm &&
-  lsm->lsm_md_magic & LMV_HASH_FLAG_MIGRATION) {
+  lmv_need_try_all_stripes(lsm)) {
/*
-* For migrating directory, if it can not find the child in
-* the source directory(master stripe), try the targeting
-* directory(stripe 1)
+* For migrating and unknown hash type directory, it will
+* try to target the entry on other stripes
 */
-   tgt = lmv_find_target(lmv, >lsm_md_oinfo[1].lmo_fid);
-   if (IS_ERR(tgt))
-   return PTR_ERR(tgt);
-
-   ptlrpc_req_finished(*reqp);
-   it->it_request = NULL;
-   *reqp = NULL;
-
-   CDEBUG(D_INODE, "For migrating dir, try target dir "DFID"\n",
-  PFID(>lsm_md_oinfo[1].lmo_fid));
-
-   op_data->op_fid1 = lsm->lsm_md_oinfo[1].lmo_fid;
-   it->it_disposition &= ~DISP_ENQ_COMPLETE;
-   rc = md_intent_lock(tgt->ltd_exp, op_data, lmm, lmmsize, it,
-   flags, reqp, cb_blocking, extra_lock_flags);
+   int stripe_index;
+
+   for (stripe_index = 1;
+stripe_index < lsm->lsm_md_stripe_count &&
+it_disposition(it, DISP_LOOKUP_NEG); 

[PATCH 79/80] staging: lustre: lnet: lock improvement for ko2iblnd

2016-08-16 Thread James Simmons
From: Liang Zhen 

kiblnd_check_sends() takes conn::ibc_lock at the begin and release
this lock at the end, this is inefficient because most use-case
needs to explicitly release ibc_lock before caling this function.

This patches changes it to kiblnd_check_sends_locked() and avoid
unnecessary lock dances.

Signed-off-by: Liang Zhen 
Signed-off-by: Doug Oucharek 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7099
Reviewed-on: http://review.whamcloud.com/20322
Reviewed-by: Amir Shehata 
Reviewed-by: Dmitry Eremin 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |   46 
 1 files changed, 18 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c 
b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 6cd78ea..6d1b14a 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -38,7 +38,6 @@
 
 static void kiblnd_peer_alive(struct kib_peer *peer);
 static void kiblnd_peer_connect_failed(struct kib_peer *peer, int active, int 
error);
-static void kiblnd_check_sends(struct kib_conn *conn);
 static void kiblnd_init_tx_msg(lnet_ni_t *ni, struct kib_tx *tx,
int type, int body_nob);
 static int kiblnd_init_rdma(struct kib_conn *conn, struct kib_tx *tx, int type,
@@ -46,6 +45,7 @@ static int kiblnd_init_rdma(struct kib_conn *conn, struct 
kib_tx *tx, int type,
 static void kiblnd_queue_tx_locked(struct kib_tx *tx, struct kib_conn *conn);
 static void kiblnd_queue_tx(struct kib_tx *tx, struct kib_conn *conn);
 static void kiblnd_unmap_tx(lnet_ni_t *ni, struct kib_tx *tx);
+static void kiblnd_check_sends_locked(struct kib_conn *conn);
 
 static void
 kiblnd_tx_done(lnet_ni_t *ni, struct kib_tx *tx)
@@ -211,9 +211,9 @@ kiblnd_post_rx(struct kib_rx *rx, int credit)
conn->ibc_outstanding_credits++;
else
conn->ibc_reserved_credits++;
+   kiblnd_check_sends_locked(conn);
spin_unlock(>ibc_lock);
 
-   kiblnd_check_sends(conn);
 out:
kiblnd_conn_decref(conn);
return rc;
@@ -344,8 +344,8 @@ kiblnd_handle_rx(struct kib_rx *rx)
!IBLND_OOB_CAPABLE(conn->ibc_version)) /* v1 only */
conn->ibc_outstanding_credits++;
 
+   kiblnd_check_sends_locked(conn);
spin_unlock(>ibc_lock);
-   kiblnd_check_sends(conn);
}
 
switch (msg->ibm_type) {
@@ -800,7 +800,7 @@ kiblnd_post_tx_locked(struct kib_conn *conn, struct kib_tx 
*tx, int credit)
  conn->ibc_noops_posted == IBLND_OOB_MSGS(ver {
/*
 * OK to drop when posted enough NOOPs, since
-* kiblnd_check_sends will queue NOOP again when
+* kiblnd_check_sends_locked will queue NOOP again when
 * posted NOOPs complete
 */
spin_unlock(>ibc_lock);
@@ -905,7 +905,7 @@ kiblnd_post_tx_locked(struct kib_conn *conn, struct kib_tx 
*tx, int credit)
 }
 
 static void
-kiblnd_check_sends(struct kib_conn *conn)
+kiblnd_check_sends_locked(struct kib_conn *conn)
 {
int ver = conn->ibc_version;
lnet_ni_t *ni = conn->ibc_peer->ibp_ni;
@@ -918,8 +918,6 @@ kiblnd_check_sends(struct kib_conn *conn)
return;
}
 
-   spin_lock(>ibc_lock);
-
LASSERT(conn->ibc_nsends_posted <= kiblnd_concurrent_sends(ver, ni));
LASSERT(!IBLND_OOB_CAPABLE(ver) ||
conn->ibc_noops_posted <= IBLND_OOB_MSGS(ver));
@@ -969,8 +967,6 @@ kiblnd_check_sends(struct kib_conn *conn)
if (kiblnd_post_tx_locked(conn, tx, credit))
break;
}
-
-   spin_unlock(>ibc_lock);
 }
 
 static void
@@ -1016,16 +1012,11 @@ kiblnd_tx_complete(struct kib_tx *tx, int status)
if (idle)
list_del(>tx_list);
 
-   kiblnd_conn_addref(conn);  /* 1 ref for me */
-
+   kiblnd_check_sends_locked(conn);
spin_unlock(>ibc_lock);
 
if (idle)
kiblnd_tx_done(conn->ibc_peer->ibp_ni, tx);
-
-   kiblnd_check_sends(conn);
-
-   kiblnd_conn_decref(conn);  /* ...until here */
 }
 
 static void
@@ -1204,9 +1195,8 @@ kiblnd_queue_tx(struct kib_tx *tx, struct kib_conn *conn)
 {
spin_lock(>ibc_lock);
kiblnd_queue_tx_locked(tx, conn);
+   kiblnd_check_sends_locked(conn);
spin_unlock(>ibc_lock);
-
-   kiblnd_check_sends(conn);
 }
 
 static int kiblnd_resolve_addr(struct rdma_cm_id *cmid,
@@ -2183,14 +2173,11 @@ kiblnd_connreq_done(struct kib_conn *conn, int status)
return;
}
 
-   /**
-* refcount taken 

[PATCH 65/80] staging: lustre: llog: keep llog ctxt indices constant

2016-08-16 Thread James Simmons
From: Mikhail Pershin 

The llog context id table cannot be shrunk easily because that
will cause index shifting and incompatibility between old client
and new server and vice versa.

Patch moves llog_ctxt_id table to the lustre_idl.h because this is
wire protocol data, these values are added to the wirecheck.

Signed-off-by: Mikhail Pershin 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5218
Reviewed-on: http://review.whamcloud.com/10758
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../lustre/lustre/include/lustre/lustre_idl.h  |   24 +++-
 drivers/staging/lustre/lustre/include/obd.h|   21 -
 drivers/staging/lustre/lustre/ptlrpc/wiretest.c|   13 ++
 3 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h 
b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
index 4a7ccc8..05fe359 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
@@ -2936,7 +2936,29 @@ enum obd_cmd {
 };
 #define OBD_FIRST_OPC OBD_PING
 
-/* catalog of log objects */
+/**
+ * llog contexts indices.
+ *
+ * There is compatibility problem with indexes below, they are not
+ * continuous and must keep their numbers for compatibility needs.
+ * See LU-5218 for details.
+ */
+enum llog_ctxt_id {
+   LLOG_CONFIG_ORIG_CTXT  =  0,
+   LLOG_CONFIG_REPL_CTXT = 1,
+   LLOG_MDS_OST_ORIG_CTXT = 2,
+   LLOG_MDS_OST_REPL_CTXT = 3, /* kept just to avoid re-assignment */
+   LLOG_SIZE_ORIG_CTXT = 4,
+   LLOG_SIZE_REPL_CTXT = 5,
+   LLOG_TEST_ORIG_CTXT = 8,
+   LLOG_TEST_REPL_CTXT = 9, /* kept just to avoid re-assignment */
+   LLOG_CHANGELOG_ORIG_CTXT = 12, /**< changelog generation on mdd */
+   LLOG_CHANGELOG_REPL_CTXT = 13, /**< changelog access on clients */
+   /* for multiple changelog consumers */
+   LLOG_CHANGELOG_USER_ORIG_CTXT = 14,
+   LLOG_AGENT_ORIG_CTXT = 15, /**< agent requests generation on cdt */
+   LLOG_MAX_CTXTS
+};
 
 /** Identifier for a single log object */
 struct llog_logid {
diff --git a/drivers/staging/lustre/lustre/include/obd.h 
b/drivers/staging/lustre/lustre/include/obd.h
index b7bdd07..e7e03be 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
@@ -172,27 +172,6 @@ struct brw_page {
u32 flag;
 };
 
-/* llog contexts */
-enum llog_ctxt_id {
-   LLOG_CONFIG_ORIG_CTXT  =  0,
-   LLOG_CONFIG_REPL_CTXT,
-   LLOG_MDS_OST_ORIG_CTXT,
-   LLOG_MDS_OST_REPL_CTXT,
-   LLOG_SIZE_ORIG_CTXT,
-   LLOG_SIZE_REPL_CTXT,
-   LLOG_RD1_ORIG_CTXT,
-   LLOG_RD1_REPL_CTXT,
-   LLOG_TEST_ORIG_CTXT,
-   LLOG_TEST_REPL_CTXT,
-   LLOG_LOVEA_ORIG_CTXT,
-   LLOG_LOVEA_REPL_CTXT,
-   LLOG_CHANGELOG_ORIG_CTXT,   /**< changelog generation on mdd */
-   LLOG_CHANGELOG_REPL_CTXT,   /**< changelog access on clients */
-   LLOG_CHANGELOG_USER_ORIG_CTXT,  /**< for multiple changelog consumers */
-   LLOG_AGENT_ORIG_CTXT,   /**< agent requests generation on cdt */
-   LLOG_MAX_CTXTS
-};
-
 struct timeout_item {
enum timeout_event ti_event;
unsigned longti_timeout;
diff --git a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c 
b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
index 2c718e0..31d3326 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c
@@ -3483,6 +3483,19 @@ void lustre_assert_wire_constants(void)
CLASSERT(LLOG_ORIGIN_HANDLE_DESTROY == 509);
CLASSERT(LLOG_FIRST_OPC == 501);
CLASSERT(LLOG_LAST_OPC == 510);
+   CLASSERT(LLOG_CONFIG_ORIG_CTXT == 0);
+   CLASSERT(LLOG_CONFIG_REPL_CTXT == 1);
+   CLASSERT(LLOG_MDS_OST_ORIG_CTXT == 2);
+   CLASSERT(LLOG_MDS_OST_REPL_CTXT == 3);
+   CLASSERT(LLOG_SIZE_ORIG_CTXT == 4);
+   CLASSERT(LLOG_SIZE_REPL_CTXT == 5);
+   CLASSERT(LLOG_TEST_ORIG_CTXT == 8);
+   CLASSERT(LLOG_TEST_REPL_CTXT == 9);
+   CLASSERT(LLOG_CHANGELOG_ORIG_CTXT == 12);
+   CLASSERT(LLOG_CHANGELOG_REPL_CTXT == 13);
+   CLASSERT(LLOG_CHANGELOG_USER_ORIG_CTXT == 14);
+   CLASSERT(LLOG_AGENT_ORIG_CTXT == 15);
+   CLASSERT(LLOG_MAX_CTXTS == 16);
 
/* Checks for struct llogd_conn_body */
LASSERTF((int)sizeof(struct llogd_conn_body) == 40, "found %lld\n",
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 58/80] staging: lustre: mdc: always use D_INFO for debug info when mdc_put_rpc_lock fails

2016-08-16 Thread James Simmons
From: wang di 

Also use D_INFO no matter what the error returned from
mdc_put_rpc_lock.

Signed-off-by: Andreas Dilger 
Signed-off-by: wang di 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4973
Reviewed-on: http://review.whamcloud.com/10150
Reviewed-by: Mike Pershin 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/mdc/mdc_locks.c |5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/lustre/lustre/mdc/mdc_locks.c 
b/drivers/staging/lustre/lustre/mdc/mdc_locks.c
index 551f3d9..3291201 100644
--- a/drivers/staging/lustre/lustre/mdc/mdc_locks.c
+++ b/drivers/staging/lustre/lustre/mdc/mdc_locks.c
@@ -841,9 +841,8 @@ resend:
mdc_put_rpc_lock(obddev->u.cli.cl_rpc_lock, it);
 
if (rc < 0) {
-   CDEBUG_LIMIT((rc == -EACCES || rc == -EIDRM) ? D_INFO : D_ERROR,
-"%s: ldlm_cli_enqueue failed: rc = %d\n",
-obddev->obd_name, rc);
+   CDEBUG(D_INFO, "%s: ldlm_cli_enqueue failed: rc = %d\n",
+  obddev->obd_name, rc);
 
mdc_clear_replay_flag(req, rc);
ptlrpc_req_finished(req);
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 69/80] staging: lustre: osc: Automatically increase the max_dirty_mb

2016-08-16 Thread James Simmons
From: Hongchao Zhang 

When RPC size or the max RPCs in flight is increased, the actual
limit might be max_dirty_mb. This patch automatically increases
the max_dirty_mb value at connection time and when the related
values are tuned manually by proc file system.

this patch also changes the unit of "cl_dirty" and "cl_dirty_max"
in client_obd from byte to page.

Signed-off-by: Li Xi 
Signed-off-by: Hongchao Zhang 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4933
Reviewed-on: http://review.whamcloud.com/10446
Reviewed-by: Jinshan Xiong 
Reviewed-by: Andreas Dilger 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/obd.h |   28 +-
 drivers/staging/lustre/lustre/ldlm/ldlm_lib.c   |   12 +---
 drivers/staging/lustre/lustre/osc/lproc_osc.c   |   10 ---
 drivers/staging/lustre/lustre/osc/osc_cache.c   |   28 +-
 drivers/staging/lustre/lustre/osc/osc_request.c |   34 +-
 drivers/staging/lustre/lustre/ptlrpc/import.c   |1 +
 6 files changed, 74 insertions(+), 39 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/obd.h 
b/drivers/staging/lustre/lustre/include/obd.h
index e7e03be..e91f65a 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
@@ -222,8 +222,8 @@ struct client_obd {
struct sptlrpc_flavorcl_flvr_mgc;   /* fixed flavor of mgc->mgs */
 
/* the grant values are protected by loi_list_lock below */
-   long cl_dirty;   /* all _dirty_ in bytes */
-   long cl_dirty_max; /* allowed w/o rpc */
+   long cl_dirty_pages;/* all _dirty_ in pahges */
+   long cl_dirty_max_pages;/* allowed w/o rpc */
long cl_dirty_transit; /* dirty synchronous */
long cl_avail_grant;   /* bytes of credit for ost */
long cl_lost_grant;/* lost credits (trunc) */
@@ -1225,4 +1225,28 @@ static inline int cli_brw_size(struct obd_device *obd)
return obd->u.cli.cl_max_pages_per_rpc << PAGE_SHIFT;
 }
 
+/*
+ * when RPC size or the max RPCs in flight is increased, the max dirty pages
+ * of the client should be increased accordingly to avoid sending fragmented
+ * RPCs over the network when the client runs out of the maximum dirty space
+ * when so many RPCs are being generated.
+ */
+static inline void client_adjust_max_dirty(struct client_obd *cli)
+{
+   /* initializing */
+   if (cli->cl_dirty_max_pages <= 0)
+   cli->cl_dirty_max_pages =
+   (OSC_MAX_DIRTY_DEFAULT * 1024 * 1024) >> PAGE_SHIFT;
+   else {
+   long dirty_max = cli->cl_max_rpcs_in_flight *
+cli->cl_max_pages_per_rpc;
+
+   if (dirty_max > cli->cl_dirty_max_pages)
+   cli->cl_dirty_max_pages = dirty_max;
+   }
+
+   if (cli->cl_dirty_max_pages > totalram_pages / 8)
+   cli->cl_dirty_max_pages = totalram_pages / 8;
+}
+
 #endif /* __OBD_H */
diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c 
b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c
index ee40006..3c98ce2 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c
@@ -299,12 +299,14 @@ int client_obd_setup(struct obd_device *obddev, struct 
lustre_cfg *lcfg)
   min_t(unsigned int, LUSTRE_CFG_BUFLEN(lcfg, 2),
 sizeof(server_uuid)));
 
-   cli->cl_dirty = 0;
+   cli->cl_dirty_pages = 0;
cli->cl_avail_grant = 0;
-   /* FIXME: Should limit this for the sum of all cl_dirty_max. */
-   cli->cl_dirty_max = OSC_MAX_DIRTY_DEFAULT * 1024 * 1024;
-   if (cli->cl_dirty_max >> PAGE_SHIFT > totalram_pages / 8)
-   cli->cl_dirty_max = totalram_pages << (PAGE_SHIFT - 3);
+   /* FIXME: Should limit this for the sum of all cl_dirty_max_pages. */
+   /*
+* cl_dirty_max_pages may be changed at connect time in
+* ptlrpc_connect_interpret().
+*/
+   client_adjust_max_dirty(cli);
INIT_LIST_HEAD(>cl_cache_waiters);
INIT_LIST_HEAD(>cl_loi_ready_list);
INIT_LIST_HEAD(>cl_loi_hp_ready_list);
diff --git a/drivers/staging/lustre/lustre/osc/lproc_osc.c 
b/drivers/staging/lustre/lustre/osc/lproc_osc.c
index 7e83d39..9172b78 100644
--- a/drivers/staging/lustre/lustre/osc/lproc_osc.c
+++ b/drivers/staging/lustre/lustre/osc/lproc_osc.c
@@ -119,6 +119,7 @@ static ssize_t max_rpcs_in_flight_store(struct kobject 
*kobj,
 
spin_lock(>cl_loi_list_lock);
cli->cl_max_rpcs_in_flight = val;
+   client_adjust_max_dirty(cli);
spin_unlock(>cl_loi_list_lock);
 
return count;
@@ -136,10 +137,10 @@ static ssize_t 

[PATCH 78/80] staging: lustre: lnet: make connection more stable with packet loss

2016-08-16 Thread James Simmons
From: Alexander Boyko 

IB network may lose last connection handshake packet.
This problem isn't Lustre specific and described at
https://oss.oracle.com/pipermail/rds-devel/2007-December/000271.html
for example. Solution is to make conection established if any packet
is received for it.

Signed-off-by: Alexander Boyko 
Signed-off-by: Alexey Lyashkov 
Seagate-bug-id: MRP-2883
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-8303
Reviewed-on: http://review.whamcloud.com/20874
Reviewed-by: Doug Oucharek 
Reviewed-by: Alexander Zarochentsev 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c 
b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 19c90fc..6cd78ea 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -3419,6 +3419,12 @@ kiblnd_qp_event(struct ib_event *event, void *arg)
case IB_EVENT_COMM_EST:
CDEBUG(D_NET, "%s established\n",
   libcfs_nid2str(conn->ibc_peer->ibp_nid));
+   /*
+* We received a packet but connection isn't established
+* probably handshake packet was lost, so free to
+* force make connection established
+*/
+   rdma_notify(conn->ibc_cmid, IB_EVENT_COMM_EST);
return;
 
default:
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 60/80] staging: lustre: ldlm: improve ldlm_lock_create() return value

2016-08-16 Thread James Simmons
From: Emoly Liu 

ldlm_lock_create() and ldlm_resource_get() always return NULL as
error reporting and "NULL" is interpretted as ENOMEM incorrectly
sometimes. This patch fixes this problem by using ERR_PTR() rather
than NULL.

Signed-off-by: Emoly Liu 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4524
Reviewed-on: http://review.whamcloud.com/9004
Reviewed-by: Bobi Jam 
Reviewed-by: Andreas Dilger 
Reviewed-by: John L. Hammond 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/ldlm/ldlm_flock.c|4 +-
 drivers/staging/lustre/lustre/ldlm/ldlm_lock.c |   28 
 drivers/staging/lustre/lustre/ldlm/ldlm_request.c  |   13 +++-
 drivers/staging/lustre/lustre/ldlm/ldlm_resource.c |   25 +
 drivers/staging/lustre/lustre/mdc/mdc_locks.c  |2 +-
 drivers/staging/lustre/lustre/mdc/mdc_reint.c  |2 +-
 drivers/staging/lustre/lustre/osc/osc_request.c|2 +-
 7 files changed, 34 insertions(+), 42 deletions(-)

diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c 
b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
index 65e8e14..61d649f 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
@@ -339,10 +339,10 @@ reprocess:
lock->l_granted_mode, _cbs,
NULL, 0, LVB_T_NONE);
lock_res_and_lock(req);
-   if (!new2) {
+   if (IS_ERR(new2)) {
ldlm_flock_destroy(req, lock->l_granted_mode,
   *flags);
-   *err = -ENOLCK;
+   *err = PTR_ERR(new2);
return LDLM_ITER_STOP;
}
goto reprocess;
diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c 
b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
index 1a0fce1..a91cdb4 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
@@ -481,8 +481,8 @@ int ldlm_lock_change_resource(struct ldlm_namespace *ns, 
struct ldlm_lock *lock,
unlock_res_and_lock(lock);
 
newres = ldlm_resource_get(ns, NULL, new_resid, type, 1);
-   if (!newres)
-   return -ENOMEM;
+   if (IS_ERR(newres))
+   return PTR_ERR(newres);
 
lu_ref_add(>lr_reference, "lock", lock);
/*
@@ -1227,7 +1227,7 @@ enum ldlm_mode ldlm_lock_match(struct ldlm_namespace *ns, 
__u64 flags,
}
 
res = ldlm_resource_get(ns, NULL, res_id, type, 0);
-   if (!res) {
+   if (IS_ERR(res)) {
LASSERT(!old_lock);
return 0;
}
@@ -1475,15 +1475,15 @@ struct ldlm_lock *ldlm_lock_create(struct 
ldlm_namespace *ns,
 {
struct ldlm_lock *lock;
struct ldlm_resource *res;
+   int rc;
 
res = ldlm_resource_get(ns, NULL, res_id, type, 1);
-   if (!res)
-   return NULL;
+   if (IS_ERR(res))
+   return ERR_CAST(res);
 
lock = ldlm_lock_new(res);
-
if (!lock)
-   return NULL;
+   return ERR_PTR(-ENOMEM);
 
lock->l_req_mode = mode;
lock->l_ast_data = data;
@@ -1497,27 +1497,33 @@ struct ldlm_lock *ldlm_lock_create(struct 
ldlm_namespace *ns,
lock->l_tree_node = NULL;
/* if this is the extent lock, allocate the interval tree node */
if (type == LDLM_EXTENT) {
-   if (!ldlm_interval_alloc(lock))
+   if (!ldlm_interval_alloc(lock)) {
+   rc = -ENOMEM;
goto out;
+   }
}
 
if (lvb_len) {
lock->l_lvb_len = lvb_len;
lock->l_lvb_data = kzalloc(lvb_len, GFP_NOFS);
-   if (!lock->l_lvb_data)
+   if (!lock->l_lvb_data) {
+   rc = -ENOMEM;
goto out;
+   }
}
 
lock->l_lvb_type = lvb_type;
-   if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_NEW_LOCK))
+   if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_NEW_LOCK)) {
+   rc = -ENOENT;
goto out;
+   }
 
return lock;
 
 out:
ldlm_lock_destroy(lock);
LDLM_LOCK_RELEASE(lock);
-   return NULL;
+   return ERR_PTR(rc);
 }
 
 /**
diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c 
b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
index 984a460..048214c 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
@@ -694,8 +694,8 @@ int ldlm_cli_enqueue(struct obd_export *exp, struct 
ptlrpc_request **reqp,
lock = 

[PATCH 80/80] staging: lustre: lnet: Stop Infinite CON RACE Condition

2016-08-16 Thread James Simmons
From: Doug Oucharek 

In current code, when a CON RACE occurs, the passive side will
let the node with the higher NID value win the race.

We have a field case where a node can have a "stuck"
connection which never goes away and is the trigger of a
never-ending loop of re-connections.

This patch introduces a counter to how many times a
connection in a connecting state has been the cause of a CON RACE
rejection. After 20 times (constant MAX_CONN_RACES_BEFORE_ABORT),
we assume the connection is stuck and let the other side (with
lower NID) win.

Signed-off-by: Doug Oucharek 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7646
Reviewed-on: http://review.whamcloud.com/19430
Reviewed-by: Amir Shehata 
Reviewed-by: Andreas Dilger 
Reviewed-by: Oleg Drokin 
Signed-off-by: James Simmons 
---
 .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h|2 +
 .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |   24 ---
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h 
b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
index 078a0c3..fbc4f68 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
@@ -582,6 +582,8 @@ struct kib_peer {
unsigned short  ibp_connecting;
/* reconnect this peer later */
unsigned short  ibp_reconnecting:1;
+   /* counter of how many times we triggered a conn race */
+   unsigned char   ibp_races;
/* # consecutive reconnection attempts to this peer */
unsigned intibp_reconnected;
/* errno on closing this peer */
diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c 
b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 6d1b14a..430ff85 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -36,6 +36,8 @@
 
 #include "o2iblnd.h"
 
+#define MAX_CONN_RACES_BEFORE_ABORT 20
+
 static void kiblnd_peer_alive(struct kib_peer *peer);
 static void kiblnd_peer_connect_failed(struct kib_peer *peer, int active, int 
error);
 static void kiblnd_init_tx_msg(lnet_ni_t *ni, struct kib_tx *tx,
@@ -2405,23 +2407,37 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void 
*priv, int priv_nob)
goto failed;
}
 
-   /* tie-break connection race in favour of the higher NID */
+   /*
+* Tie-break connection race in favour of the higher NID.
+* If we keep running into a race condition multiple times,
+* we have to assume that the connection attempt with the
+* higher NID is stuck in a connecting state and will never
+* recover.  As such, we pass through this if-block and let
+* the lower NID connection win so we can move forward.
+*/
if (peer2->ibp_connecting &&
-   nid < ni->ni_nid) {
+   nid < ni->ni_nid && peer2->ibp_races <
+   MAX_CONN_RACES_BEFORE_ABORT) {
+   peer2->ibp_races++;
write_unlock_irqrestore(g_lock, flags);
 
-   CWARN("Conn race %s\n", libcfs_nid2str(peer2->ibp_nid));
+   CDEBUG(D_NET, "Conn race %s\n",
+  libcfs_nid2str(peer2->ibp_nid));
 
kiblnd_peer_decref(peer);
rej.ibr_why = IBLND_REJECT_CONN_RACE;
goto failed;
}
-
+   if (peer2->ibp_races >= MAX_CONN_RACES_BEFORE_ABORT)
+   CNETERR("Conn race %s: unresolved after %d attempts, 
letting lower NID win\n",
+   libcfs_nid2str(peer2->ibp_nid),
+   MAX_CONN_RACES_BEFORE_ABORT);
/**
 * passive connection is allowed even this peer is waiting for
 * reconnection.
 */
peer2->ibp_reconnecting = 0;
+   peer2->ibp_races = 0;
peer2->ibp_accepting++;
kiblnd_peer_addref(peer2);
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 71/80] staging: lustre: llite: remove assert for acl refcount

2016-08-16 Thread James Simmons
The purpose of this asssert to was to ensure lustre
was properly managing its posix_acl access. This test
is invalid due to the VFS layer also taking references
on the posix_acl. In reality their is no simple way to
detect this class of mistakes.

Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/llite/llite_lib.c |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c 
b/drivers/staging/lustre/lustre/llite/llite_lib.c
index da00fbd..64c8a2b 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -1247,7 +1247,6 @@ void ll_clear_inode(struct inode *inode)
 
 #ifdef CONFIG_FS_POSIX_ACL
if (lli->lli_posix_acl) {
-   LASSERT(atomic_read(>lli_posix_acl->a_refcount) == 1);
posix_acl_release(lli->lli_posix_acl);
lli->lli_posix_acl = NULL;
}
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 56/80] staging: lustre: clio: Reduce memory overhead of per-page allocation

2016-08-16 Thread James Simmons
From: Jinshan Xiong 

A page in clio used to occupy 584 bytes, which will use size-1024
slab cache. This patch reduces the per-page overhead to 512 bytes
so it can use size-512 instead.

Signed-off-by: Jinshan Xiong 
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4793
Reviewed-on: http://review.whamcloud.com/10070
Reviewed-by: Andreas Dilger 
Reviewed-by: Bobi Jam 
Signed-off-by: James Simmons 
---
 drivers/staging/lustre/lustre/include/cl_object.h  |   37 +---
 drivers/staging/lustre/lustre/llite/vvp_internal.h |6 ++--
 .../staging/lustre/lustre/lov/lov_cl_internal.h|4 +-
 drivers/staging/lustre/lustre/lov/lov_io.c |6 +--
 drivers/staging/lustre/lustre/lov/lov_page.c   |1 +
 drivers/staging/lustre/lustre/obdclass/cl_io.c |   10 +-
 drivers/staging/lustre/lustre/obdclass/cl_page.c   |   12 +-
 drivers/staging/lustre/lustre/osc/osc_internal.h   |1 -
 drivers/staging/lustre/lustre/osc/osc_io.c |7 +++-
 drivers/staging/lustre/lustre/osc/osc_request.c|6 ---
 10 files changed, 26 insertions(+), 64 deletions(-)

diff --git a/drivers/staging/lustre/lustre/include/cl_object.h 
b/drivers/staging/lustre/lustre/include/cl_object.h
index 0fa71a5..d269b32 100644
--- a/drivers/staging/lustre/lustre/include/cl_object.h
+++ b/drivers/staging/lustre/lustre/include/cl_object.h
@@ -690,17 +690,6 @@ enum cl_page_type {
 };
 
 /**
- * Flags maintained for every cl_page.
- */
-enum cl_page_flags {
-   /**
-* Set when pagein completes. Used for debugging (read completes at
-* most once for a page).
-*/
-   CPF_READ_COMPLETED = 1 << 0
-};
-
-/**
  * Fields are protected by the lock on struct page, except for atomics and
  * immutables.
  *
@@ -712,26 +701,23 @@ enum cl_page_flags {
 struct cl_page {
/** Reference counter. */
atomic_t cp_ref;
+   /** Transfer error. */
+   int  cp_error;
/** An object this page is a part of. Immutable after creation. */
struct cl_object*cp_obj;
-   /** List of slices. Immutable after creation. */
-   struct list_head   cp_layers;
/** vmpage */
struct page *cp_vmpage;
+   /** Linkage of pages within group. Pages must be owned */
+   struct list_head cp_batch;
+   /** List of slices. Immutable after creation. */
+   struct list_head cp_layers;
+   /** Linkage of pages within cl_req. */
+   struct list_head cp_flight;
/**
 * Page state. This field is const to avoid accidental update, it is
 * modified only internally within cl_page.c. Protected by a VM lock.
 */
const enum cl_page_state cp_state;
-   /** Linkage of pages within group. Protected by cl_page::cp_mutex. */
-   struct list_headcp_batch;
-   /** Mutex serializing membership of a page in a batch. */
-   struct mutexcp_mutex;
-   /** Linkage of pages within cl_req. */
-   struct list_head   cp_flight;
-   /** Transfer error. */
-   int   cp_error;
-
/**
 * Page type. Only CPT_TRANSIENT is used so far. Immutable after
 * creation.
@@ -744,10 +730,6 @@ struct cl_page {
 */
struct cl_io*cp_owner;
/**
-* Debug information, the task is owning the page.
-*/
-   struct task_struct  *cp_task;
-   /**
 * Owning IO request in cl_page_state::CPS_PAGEOUT and
 * cl_page_state::CPS_PAGEIN states. This field is maintained only in
 * the top-level pages. Protected by a VM lock.
@@ -759,8 +741,6 @@ struct cl_page {
struct lu_ref_link   cp_obj_ref;
/** Link to a queue, for debugging. */
struct lu_ref_link   cp_queue_ref;
-   /** Per-page flags from enum cl_page_flags. Protected by a VM lock. */
-   unsigned cp_flags;
/** Assigned if doing a sync_io */
struct cl_sync_io   *cp_sync_io;
 };
@@ -2200,6 +2180,7 @@ static inline void cl_object_page_init(struct cl_object 
*clob, int size)
 {
clob->co_slice_off = cl_object_header(clob)->coh_page_bufsize;
cl_object_header(clob)->coh_page_bufsize += cfs_size_round(size);
+   WARN_ON(cl_object_header(clob)->coh_page_bufsize > 512);
 }
 
 static inline void *cl_object_page_slice(struct cl_object *clob,
diff --git a/drivers/staging/lustre/lustre/llite/vvp_internal.h 
b/drivers/staging/lustre/lustre/llite/vvp_internal.h
index 79fc428..99437b8 100644
--- a/drivers/staging/lustre/lustre/llite/vvp_internal.h
+++ b/drivers/staging/lustre/lustre/llite/vvp_internal.h
@@ -247,9 +247,9 @@ struct vvp_object {
  */
 struct vvp_page {
struct cl_page_slice vpg_cl;
-   int   

Re: [PATCH v2] android: binder: fix dangling pointer comparison

2016-08-16 Thread Arve Hjønnevåg
On Mon, Aug 15, 2016 at 7:58 AM, Greg Kroah-Hartman
 wrote:
> On Thu, Jun 16, 2016 at 12:45:33AM +0200, Jann Horn wrote:
>> If /dev/binder is opened and the opener process then e.g. calls execve,
>> proc->vma_vm_mm will still point to the location of the now-freed
>> mm_struct. If the process then calls ioctl(binder_fd, ...), the dangling
>> proc->vma_vm_mm pointer will be compared to current->mm.
>>
>> Let the binder take a reference to the mm_struct to avoid this.
>>
>> v2: use the right refcounter
>>
>> Fixes: a906d6931f3ccaf7de805643190765ddd7378e27
>
> Nit, the proper way to do this is:
>
> Fixes: a906d6931f3c ("android: binder: Sanity check at binder ioctl")
>
> You can get that by doing:
> git show -s --abbrev-commit --abbrev=12 --pretty=format:"%h 
> (\"%s\")%n" a906d6931f3ccaf7de805643190765ddd7378e27
>
> Also, I'm guessing this should go to the stable kernels that include the
> above patch?
>

Has this patch been tested?

Does it actually fix anything?

Changes to vma_vm_mm are normally protected by the mmap_sem it
contains, and is set to NULL in the vma->vm_ops->close call on the
binder vma. The vma_vm_mm pointer is only used to check if the mm
struct that the binder driver was mmapped into is the same mm struct
that the driver just locked (in binder_update_page_range). I don't
think change description here is accurate. If a process calls execve,
the old vma should be closed (and vma_vm_mm cleared) before the
mm_struct that it belongs too is freed.

-- 
Arve Hjønnevåg
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] Staging: android: ion: ion_heap.c: fix parenthesis alignment

2016-08-16 Thread Ben LeMasurier
This fixes the checkpatch.pl "Alignment should match open parenthesis"
issues in ion_heap.c.

Signed-off-by: Ben LeMasurier 
---
 drivers/staging/android/ion/ion_heap.c | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/android/ion/ion_heap.c 
b/drivers/staging/android/ion/ion_heap.c
index ca15a87..4e5c0f1 100644
--- a/drivers/staging/android/ion/ion_heap.c
+++ b/drivers/staging/android/ion/ion_heap.c
@@ -93,7 +93,7 @@ int ion_heap_map_user(struct ion_heap *heap, struct 
ion_buffer *buffer,
}
len = min(len, remainder);
ret = remap_pfn_range(vma, addr, page_to_pfn(page), len,
-   vma->vm_page_prot);
+ vma->vm_page_prot);
if (ret)
return ret;
addr += len;
@@ -116,7 +116,7 @@ static int ion_heap_clear_pages(struct page **pages, int 
num, pgprot_t pgprot)
 }
 
 static int ion_heap_sglist_zero(struct scatterlist *sgl, unsigned int nents,
-   pgprot_t pgprot)
+   pgprot_t pgprot)
 {
int p = 0;
int ret = 0;
@@ -181,7 +181,7 @@ size_t ion_heap_freelist_size(struct ion_heap *heap)
 }
 
 static size_t _ion_heap_freelist_drain(struct ion_heap *heap, size_t size,
-   bool skip_pools)
+  bool skip_pools)
 {
struct ion_buffer *buffer;
size_t total_drained = 0;
@@ -266,7 +266,7 @@ int ion_heap_init_deferred_free(struct ion_heap *heap)
 }
 
 static unsigned long ion_heap_shrink_count(struct shrinker *shrinker,
-   struct shrink_control *sc)
+  struct shrink_control *sc)
 {
struct ion_heap *heap = container_of(shrinker, struct ion_heap,
 shrinker);
@@ -279,7 +279,7 @@ static unsigned long ion_heap_shrink_count(struct shrinker 
*shrinker,
 }
 
 static unsigned long ion_heap_shrink_scan(struct shrinker *shrinker,
-   struct shrink_control *sc)
+ struct shrink_control *sc)
 {
struct ion_heap *heap = container_of(shrinker, struct ion_heap,
 shrinker);
-- 
2.9.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 2/9] staging: most: hdm-usb: fix race between enqueue and most_stop_enqueue

2016-08-16 Thread Greg KH
On Tue, Aug 16, 2016 at 01:38:50PM +0200, Christian Gromm wrote:
> On Mon, 15 Aug 2016 20:39:38 +0200
> Greg KH  wrote:
> 
> > On Mon, Jul 18, 2016 at 05:25:28PM +0200, Christian Gromm wrote:
> > > The "broken in pipe" handler of the USB-HDM calls most_stop_enqueue() to
> > > stop the MBO traffic before returning all MBOs back to the Mostcore.  As
> > > the enqueue() call from the Mostcore may run in parallel with the
> > > most_stop_enqueue(), the HDM may run into the inconsistent state and
> > > crash the kernel.
> > > 
> > > This patch synchronizes enqueue(), most_stop_enqueue() and
> > > most_resume_enqueue() with a mutex, hence avoiding the race condition.
> > > 
> > > Signed-off-by: Andrey Shvetsov 
> > > Signed-off-by: Christian Gromm 
> > > ---
> > >  drivers/staging/most/hdm-usb/hdm_usb.c |  3 +-
> > >  drivers/staging/most/mostcore/core.c   | 53 
> > > --
> > >  2 files changed, 38 insertions(+), 18 deletions(-)
> > 
> > Doesn't apply to my tree anymore.  Can you fix this up and resend it and
> > the rest in this series so I can apply them?
> 
> According to git you didn't apply the patchset I sent in on Friday 6/17/16, 
> did you?
> 
>   >>> "[PATCH 0/9] staging: most: fix hdm-usb issues" <<<
> 
> Those patches need to be applied before the latest set.

All of the "staging: most:" patches are now applied to my tree, can you
sync up with it and resend anything reamaining?

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3 0/4] Drivers: hv: balloon: fix WS2012 memory hotplug issues and do some cleanup

2016-08-16 Thread Vitaly Kuznetsov
Changes since v2:
- check for gaps when onlining 'tails' in hv_bring_pgs_online() too [Alex Ng]

Changes since v1:
- Keep ol_waitevent and wait when kernel memory onlining is disabled [Alex Ng]

Crashes with Hyper-V balloon driver are reported with WS2012 (non-R2),
hosts I was able to identify two issues which I fix with first two patches
of this series. Patches 3 removes wait on ol_waitevent when we have in
in-kernel memory onlining, patch 4 gets rid of ha_region_mutex by doing
the locking fine-grained with a spinlock.

Vitaly Kuznetsov (4):
  Drivers: hv: balloon: keep track of where ha_region starts
  Drivers: hv: balloon: account for gaps in hot add regions
  Drivers: hv: balloon: don't wait for ol_waitevent when
memhp_auto_online is enabled
  Drivers: hv: balloon: replace ha_region_mutex with spinlock

 drivers/hv/hv_balloon.c | 241 +++-
 1 file changed, 156 insertions(+), 85 deletions(-)

-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


  1   2   >