Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-1876 hsm: layout lock implementation on server side
[fs/lustre-release.git]
/
lustre
/
lclient
/
glimpse.c
diff --git
a/lustre/lclient/glimpse.c
b/lustre/lclient/glimpse.c
index
31acda0
..
c4b44de
100644
(file)
--- a/
lustre/lclient/glimpse.c
+++ b/
lustre/lclient/glimpse.c
@@
-27,7
+27,7
@@
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* 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/
*/
/*
* 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_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) {
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)
/*
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);
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_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)
}
int cl_local_size(struct inode *inode)