X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flclient%2Flcommon_cl.c;h=dd04f9bff14a6a3c8f684388d14da21f2b179afb;hp=2f0419cbf7f198420d24605b964bd00ffecf07bf;hb=e3fa506969073cdcbca471c276f09d60fea8fe5e;hpb=3d3e8e27d6bfbfcf6970f7aa8942caf7a362c3db diff --git a/lustre/lclient/lcommon_cl.c b/lustre/lclient/lcommon_cl.c index 2f0419c..dd04f9b 100644 --- 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(). @@ -624,6 +625,7 @@ int ccc_lock_fits_into(const struct lu_env *env, */ if (cio->cui_glimpse) result = descr->cld_mode != CLM_WRITE; + /* * 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); +}