Fix bugs in mdsyncfiletag().
Commit 3eb77eba moved a _mdfd_getseg() call from mdsync() into a new callback function mdsyncfiletag(), but didn't get the arguments quite right. Without the EXTENSION_DONT_CHECK_SIZE flag we fail to open a segment if lower-numbered segments have been truncated, and it wants a block number rather than a segment number. While comparing with the older coding, also remove an unnecessary clobbering of errno, and adjust the code in mdunlinkfiletag() to ressemble the original code from mdpostckpt() more closely instead of using an unnecessary call to smgropen(). Author: Thomas Munro Discussion: https://postgr.es/m/CA%2BhUKGL%2BYLUOA0eYiBXBfwW%2BbH5kFgh94%3DgQH0jHEJ-t5Y91wQ%40mail.gmail.com
This commit is contained in:
parent
c46c85d459
commit
794c543b17
@ -1266,14 +1266,14 @@ mdsyncfiletag(const FileTag *ftag, char *path)
|
||||
strlcpy(path, p, MAXPGPATH);
|
||||
pfree(p);
|
||||
|
||||
/* Try to find open the requested segment. */
|
||||
v = _mdfd_getseg(reln, ftag->forknum, ftag->segno, false,
|
||||
EXTENSION_RETURN_NULL);
|
||||
/* Try to open the requested segment. */
|
||||
v = _mdfd_getseg(reln,
|
||||
ftag->forknum,
|
||||
ftag->segno * (BlockNumber) RELSEG_SIZE,
|
||||
false,
|
||||
EXTENSION_RETURN_NULL | EXTENSION_DONT_CHECK_SIZE);
|
||||
if (v == NULL)
|
||||
{
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Try to fsync the file. */
|
||||
return FileSync(v->mdfd_vfd, WAIT_EVENT_DATA_FILE_SYNC);
|
||||
@ -1288,11 +1288,10 @@ mdsyncfiletag(const FileTag *ftag, char *path)
|
||||
int
|
||||
mdunlinkfiletag(const FileTag *ftag, char *path)
|
||||
{
|
||||
SMgrRelation reln = smgropen(ftag->rnode, InvalidBackendId);
|
||||
char *p;
|
||||
|
||||
/* Compute the path. */
|
||||
p = _mdfd_segpath(reln, ftag->forknum, ftag->segno);
|
||||
p = relpathperm(ftag->rnode, MAIN_FORKNUM);
|
||||
strlcpy(path, p, MAXPGPATH);
|
||||
pfree(p);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user