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
branch: HEAD
[fs/lustre-release.git]
/
lustre
/
lclient
/
lcommon_cl.c
diff --git
a/lustre/lclient/lcommon_cl.c
b/lustre/lclient/lcommon_cl.c
index
2f0419c
..
87d2b91
100644
(file)
--- a/
lustre/lclient/lcommon_cl.c
+++ b/
lustre/lclient/lcommon_cl.c
@@
-503,11
+503,13
@@
void ccc_transient_page_verify(const struct cl_page *page)
{
}
-
void
ccc_transient_page_own(const struct lu_env *env,
+
int
ccc_transient_page_own(const struct lu_env *env,
const struct cl_page_slice *slice,
- struct cl_io *unused)
+ struct cl_io *unused,
+ int nonblock)
{
ccc_transient_page_verify(slice->cpl_page);
+ return 0;
}
void ccc_transient_page_assume(const struct lu_env *env,
@@
-599,7
+601,6
@@
int ccc_lock_wait(const struct lu_env *env, const struct cl_lock_slice *slice)
* cached lock "fits" into io.
*
* \param slice lock to be checked
- *
* \param io IO that wants a lock.
*
* \see lov_lock_fits_into().
@@
-623,7
+624,8
@@
int ccc_lock_fits_into(const struct lu_env *env,
* doesn't enqueue CLM_WRITE sub-locks.
*/
if (cio->cui_glimpse)
- result = descr->cld_mode != CLM_WRITE;
+ result = descr->cld_mode == CLM_PHANTOM;
+
/*
* Also, don't match incomplete write locks for read, otherwise read
* would enqueue missing sub-locks in the write mode.
@@
-1059,6
+1061,7
@@
int cl_setattr_ost(struct inode *inode, struct obd_capa *capa)
oinfo.oi_oa = oa;
oinfo.oi_md = lsm;
+ oinfo.oi_capa = capa;
/* XXX: this looks unnecessary now. */
rc = obd_setattr_rqset(cl_i2sbi(inode)->ll_dt_exp, &oinfo,
@@
-1286,3
+1289,43
@@
__u16 ll_dirent_type_get(struct lu_dirent *ent)
}
return type;
}
+
+/**
+ * build inode number from passed @fid */
+ino_t cl_fid_build_ino(struct lu_fid *fid)
+{
+ ino_t ino;
+ ENTRY;
+
+ if (fid_is_igif(fid)) {
+ ino = lu_igif_ino(fid);
+ RETURN(ino);
+ }
+
+ /* Very stupid and having many downsides inode allocation algorithm
+ * based on fid. */
+ ino = fid_flatten(fid) & 0xFFFFFFFF;
+
+ if (unlikely(ino == 0))
+ /* the first result ino is 0xFFC001, so this is rarely used */
+ ino = 0xffbcde;
+ ino = ino | 0x80000000;
+ RETURN(ino);
+}
+
+/**
+ * build inode generation from passed @fid. If our FID overflows the 32-bit
+ * inode number then return a non-zero generation to distinguish them. */
+__u32 cl_fid_build_gen(struct lu_fid *fid)
+{
+ __u32 gen;
+ ENTRY;
+
+ if (fid_is_igif(fid)) {
+ gen = lu_igif_gen(fid);
+ RETURN(gen);
+ }
+
+ gen = (fid_flatten(fid) >> 32);
+ RETURN(gen);
+}