mirror of
https://git.openafs.org/openafs.git
synced 2025-01-31 05:27:44 +00:00
vol: detach offline volumes on dafs
Taking a volume offline always clears the inService bit. Taking a volume out of service also takes it offline. Therefore, if the inService flag is false, the volume in question should be offline. On dafs, an offline volume should be unattached. The attach2() function does not change the state of the volume received as an argument to unattached when the inService flag is false. Instead, this function changes the state of the volume in question to pre-attached and returns VNOVOL to the client. As result, subsequent accesses to this volume will make the server try and fail to attach this offline volume over and over again, writing to the FileLog each time. To fix this problem, detach the volume received as an argument if the inService flag is false. Since the new state of this volume will be unattached, subsequent accesses will not hit attach2(). This situation where a volume is not offline but is also not in service can occur if a volume is taken offline with vos offline and some time later the DAFS fileserver is shutdown and restarted; the volume is placed into the preattach state by default when the server restarts. Each access to the volume by clients then causes the fileserver to attempt to attach the volume, which fails, since the in-service flag in the volume header is false from the previous vos offline. The fileserver will log a warning to the FileLog on each attempt to attach the volume, and this will fill the FileLog with duplicate messages corresponding to the number of attempted accesses. Reviewed-on: https://gerrit.openafs.org/12515 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> (cherry picked from commit 2421da2bf327525216ec7e79b9aa81fa2c4f77d5) Change-Id: I95cffb6a91797341d9202cbbef3b205c11348d5e Reviewed-on: https://gerrit.openafs.org/12569 Reviewed-by: Marcio Brito Barbosa <mbarbosa@sinenomine.net> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Mark Vitale <mvitale@sinenomine.net> Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> Tested-by: Michael Meffie <mmeffie@sinenomine.net> Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
This commit is contained in:
parent
72a48c34e7
commit
2b13830447
@ -3507,6 +3507,9 @@ attach2(Error * ec, VolId volumeId, char *path, struct DiskPartition64 *partp,
|
||||
FreeVolumeHeader(vp);
|
||||
} else if (!V_inService(vp)) {
|
||||
Log("Volume %lu offline: not in service\n", afs_printable_uint32_lu(V_id(vp)));
|
||||
/* the volume is offline and should be unattached */
|
||||
*ec = VOFFLINE;
|
||||
error_state = VOL_STATE_UNATTACHED;
|
||||
FreeVolumeHeader(vp);
|
||||
} else {
|
||||
Log("Volume %lu offline: needs salvage\n", afs_printable_uint32_lu(V_id(vp)));
|
||||
|
Loading…
x
Reference in New Issue
Block a user