/**
* \retval 1 iff object \a o exists on stable storage,
+ * \retval 0 iff object \a o not exists on stable storage.
* \retval -1 iff object \a o is on remote server.
*/
static inline int lu_object_exists(const struct lu_object *o)
struct mdt_lock_handle *lh;
int rc;
ENTRY;
+
CDEBUG(D_IOCTL, "getting version for "DFID"\n", PFID(fid));
if (!fid_is_sane(fid))
RETURN(-EINVAL);
* fid, this is error to find remote object here
*/
CERROR("nonlocal object "DFID"\n", PFID(fid));
+ } else if (rc == 0) {
+ *(__u64 *)data->ioc_inlbuf2 = ENOENT_VERSION;
+ rc = -ENOENT;
} else {
version = mo_version_get(mti->mti_env, mdt_object_child(obj));
*(__u64 *)data->ioc_inlbuf2 = version;
cos_param_file=$TMP/rvbr-cos-params
save_lustre_params $(comma_list $(mdts_nodes)) "mdt.*.commit_on_sharing" > $cos_param_file
+test_0a() {
+ get_version $CLIENT1 $DIR/$tdir/1a || true
+}
+run_test 0a "getversion for non existent file shouldn't cause kernel panic"
+
+test_0b() {
+ local var=${SINGLEMDS}_svc
+ local fid
+ local file=$DIR/$tdir/f
+
+ do_node $CLIENT1 mkdir -p $DIR/$tdir/
+ do_node $CLIENT1 touch $file
+ fid=$(do_node $CLIENT1 $LFS path2fid $file)
+ do_node $CLIENT1 rm -rf $file
+ do_facet $SINGLEMDS $LCTL --device ${!var} getobjversion \\\"$fid\\\" || true
+}
+run_test 0b "getversion for non existent fid shouldn't cause kernel panic"
+
# test set #1: OPEN
test_1a() { # former test_0a
local file=$DIR/$tfile