X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libsysio%2Fsrc%2Freadlink.c;h=c8e74366bf63049f6191089cd76439787558e8e9;hb=e224b50dffb0e0b7aeacb1ed1d664de8b0b5748a;hp=f08374482870869482914e7e4e12ca96b9b4bc72;hpb=b6298eaa3e08a581a7bbc5a4ee95c1f07401dfb5;p=fs%2Flustre-release.git diff --git a/libsysio/src/readlink.c b/libsysio/src/readlink.c index f083744..c8e7436 100644 --- a/libsysio/src/readlink.c +++ b/libsysio/src/readlink.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include "sysio.h" @@ -70,14 +71,15 @@ SYSIO_INTERFACE_NAME(readlink)(const char *path, char *buf, size_t bufsiz) if (err) goto out; ino = pno->p_base->pb_ino; - err = (*ino->i_ops.inop_readlink)(pno, buf, bufsiz); - if (err) + if (!S_ISLNK(ino->i_stbuf.st_mode)) { + err = -EINVAL; goto error; - + } + err = (*ino->i_ops.inop_readlink)(pno, buf, bufsiz); error: P_RELE(pno); out: - SYSIO_INTERFACE_RETURN(err, err >= 0 ? 0 : err); + SYSIO_INTERFACE_RETURN(err < 0 ? -1 : err, err >= 0 ? 0 : err); } #ifdef REDSTORM