Break origin's callback for RXAFS_Rename target
authorAndrew Deason <adeason@sinenomine.net>
Thu, 22 Oct 2009 03:16:38 +0000 (22:16 -0500)
committerDerrick Brashear <shadow@dementia.org>
Thu, 10 Jun 2010 19:14:28 +0000 (12:14 -0700)
When we RXAFS_Rename something, the status of the renamed FID can
sometimes change, and thus we break callbacks on it. Currently, however,
we do not break the callback for the originating client, even though the
status of the target changes and we do not return an AFSFetchStatus to
the caller.

Since the callback is not always broken for the target, it may not be
immediately obvious to client implementations to implicitly break the
target's callback. Since we do not have an explicit protocol
specification saying that the callback is implicitly broken, break the
callback for the origin client as well, to be safe.

Change-Id: I97d90518a240f852013d1d63fccef663c8b0e998
Reviewed-on: http://gerrit.openafs.org/709
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/viced/afsfileprocs.c

index 7352a93..97e4130 100644 (file)
@@ -4241,7 +4241,13 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
     }
     if (updatefile) {
        /* if a dir moved, .. changed */
-       BreakCallBack(client->host, &fileFid, 0);
+       /* we do not give an AFSFetchStatus structure back to the
+        * originating client, and the file's status has changed, so be
+        * sure to send a callback break. In theory the client knows
+        * enough to know that the callback could be broken implicitly,
+        * but that may not be clear, and some client implementations
+        * may not know to. */
+       BreakCallBack(client->host, &fileFid, 1);
     }
     if (newfileptr) {
        /* Note:  it is not necessary to break the callback */