} else {
fid_build_reg_res_name(fid, &res_id);
switch (it->it_op) {
- case IT_GETATTR:
- policy.l_inodebits.bits = MDS_INODELOCK_UPDATE;
- break;
+ case IT_GETATTR:
+ /* File attributes are held under multiple bits:
+ * nlink is under lookup lock, size and times are
+ * under UPDATE lock and recently we've also got
+ * a separate permissions lock for owner/group/acl that
+ * were protected by lookup lock before.
+ * Getattr must provide all of that information,
+ * so we need to ensure we have all of those locks.
+ * Unfortunately, if the bits are split across multiple
+ * locks, there's no easy way to match all of them here,
+ * so an extra RPC would be performed to fetch all
+ * of those bits at once for now. */
+ policy.l_inodebits.bits = MDS_INODELOCK_UPDATE |
+ MDS_INODELOCK_LOOKUP |
+ MDS_INODELOCK_PERM;
+ break;
case IT_LAYOUT:
policy.l_inodebits.bits = MDS_INODELOCK_LAYOUT;
break;
policy.l_inodebits.bits = MDS_INODELOCK_LOOKUP;
break;
}
+
mode = ldlm_lock_match(exp->exp_obd->obd_namespace,
LDLM_FL_BLOCK_GRANTED, &res_id,
LDLM_IBITS, &policy,
}
run_test 39n "check that O_NOATIME is honored"
+test_39o() {
+ TESTDIR=$DIR/$tdir/$tfile
+ [ -e $TESTDIR ] && rm -rf $TESTDIR
+ mkdir -p $TESTDIR
+ cd $TESTDIR
+ links1=2
+ ls
+ mkdir a b
+ ls
+ links2=$(stat -c %h .)
+ [ $(($links1 + 2)) != $links2 ] &&
+ error "wrong links count $(($links1 + 2)) != $links2"
+ rmdir b
+ links3=$(stat -c %h .)
+ [ $(($links1 + 1)) != $links3 ] &&
+ error "wrong links count $links1 != $links3"
+ return 0
+}
+run_test 39o "directory cached attributes updated after create ========"
+
test_40() {
dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1
$RUNAS $OPENFILE -f O_WRONLY:O_TRUNC $DIR/$tfile &&