posix: prevent crash when SEEK_DATA/HOLE is not supported

Instead of not defining the 'seek' fop when it's not supported on the
compilation platform, we simply return EINVAL when it's used.

Fixes: bz#1611834
Change-Id: I253666d8910c5e2fffa3a3ba37085e5c1c058a8e
Signed-off-by: Xavi Hernandez <xhernandez@redhat.com>
This commit is contained in:
Xavi Hernandez 2018-08-02 22:55:35 +02:00 committed by Shyamsundar Ranganathan
parent 60fbef9a0b
commit e47a320508
2 changed files with 4 additions and 4 deletions

View File

@ -1049,11 +1049,11 @@ posix_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)
}
#ifdef HAVE_SEEK_HOLE
int32_t
posix_seek (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
gf_seek_what_t what, dict_t *xdata)
{
#ifdef HAVE_SEEK_HOLE
struct posix_fd *pfd = NULL;
off_t ret = -1;
int err = 0;
@ -1123,9 +1123,11 @@ out:
STACK_UNWIND_STRICT (seek, frame, (ret == -1 ? -1 : 0), err,
(ret == -1 ? -1 : ret), rsp_xdata);
#else
STACK_UNWIND_STRICT (seek, frame, -1, EINVAL, 0, NULL);
#endif
return 0;
}
#endif
int32_t
posix_opendir (call_frame_t *frame, xlator_t *this,

View File

@ -75,9 +75,7 @@ struct xlator_fops fops = {
.discard = posix_discard,
.zerofill = posix_zerofill,
.ipc = posix_ipc,
#ifdef HAVE_SEEK_HOLE
.seek = posix_seek,
#endif
.lease = posix_lease,
.put = posix_put,
};