Commit 3647e42b authored by David Howells's avatar David Howells

afs: Fix over zealous "vnode modified" warnings

Occasionally, warnings like this:

	vnode modified 2af7 on {10000b:1} [exp 2af2] YFS.FetchStatus(vnode)

are emitted into the kernel log.  This indicates that when we were applying
the updated vnode (file) status retrieved from the server to an inode we
saw that the data version number wasn't what we were expecting (in this
case it's 0x2af7 rather than 0x2af2).

We've usually received a callback from the server prior to this point - or
the callback promise has lapsed - so the warning is merely informative and
the state is to be expected.

Fix this by only emitting the warning if the we still think that we have a
valid callback promise and haven't received a callback.

Also change the format slightly so so that the new data version doesn't
look like part of the text, the like is prefixed with "kAFS: " and the
message is ranked as a warning.

Fixes: 31143d5d ("AFS: implement basic file write support")
Reported-by: default avatarIan Wienand <iwienand@redhat.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent a188339c
...@@ -207,11 +207,13 @@ static void afs_apply_status(struct afs_fs_cursor *fc, ...@@ -207,11 +207,13 @@ static void afs_apply_status(struct afs_fs_cursor *fc,
if (expected_version && if (expected_version &&
*expected_version != status->data_version) { *expected_version != status->data_version) {
kdebug("vnode modified %llx on {%llx:%llu} [exp %llx] %s", if (test_bit(AFS_VNODE_CB_PROMISED, &vnode->flags))
(unsigned long long) status->data_version, pr_warn("kAFS: vnode modified {%llx:%llu} %llx->%llx %s\n",
vnode->fid.vid, vnode->fid.vnode, vnode->fid.vid, vnode->fid.vnode,
(unsigned long long) *expected_version, (unsigned long long)*expected_version,
fc->type ? fc->type->name : "???"); (unsigned long long)status->data_version,
fc->type ? fc->type->name : "???");
vnode->invalid_before = status->data_version; vnode->invalid_before = status->data_version;
if (vnode->status.type == AFS_FTYPE_DIR) { if (vnode->status.type == AFS_FTYPE_DIR) {
if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &vnode->flags)) if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &vnode->flags))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment