Whamcloud - gitweb
LU-1876 hsm: layout lock implementation on server side
[fs/lustre-release.git] / lustre / lclient / glimpse.c
index 31acda0..c4b44de 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2012, Whamcloud, Inc.
+ * Copyright (c) 2011, 2012, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -173,6 +173,7 @@ int cl_glimpse_lock(const struct lu_env *env, struct cl_io *io,
                         cl_lock_release(env, lock, "glimpse", cfs_current());
                 } else {
                         CDEBUG(D_DLMTRACE, "No objects for inode\n");
+                       cl_merge_lvb(inode);
                 }
         }
 
@@ -224,6 +225,8 @@ int cl_glimpse_size0(struct inode *inode, int agl)
 
         result = cl_io_get(inode, &env, &io, &refcheck);
         if (result > 0) {
+       again:
+               io->ci_verify_layout = 1;
                 result = cl_io_init(env, io, CIT_MISC, io->ci_obj);
                 if (result > 0)
                         /*
@@ -234,10 +237,14 @@ int cl_glimpse_size0(struct inode *inode, int agl)
                 else if (result == 0)
                         result = cl_glimpse_lock(env, io, inode, io->ci_obj,
                                                  agl);
+
+               OBD_FAIL_TIMEOUT(OBD_FAIL_GLIMPSE_DELAY, 2);
                 cl_io_fini(env, io);
-                cl_env_put(env, &refcheck);
-        }
-        RETURN(result);
+               if (unlikely(io->ci_need_restart))
+                       goto again;
+               cl_env_put(env, &refcheck);
+       }
+       RETURN(result);
 }
 
 int cl_local_size(struct inode *inode)