X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=libsysio%2Fsrc%2Ffile.c;h=fbd91d889c9bae713705569bb9fbf190e21acec3;hp=bffc3fd61c00fef9311904a7eb1bb60515f1c869;hb=6b6514dc5f361bd3871c447e42fde55cff7d252e;hpb=8692f4651696ff4324db3ad738d3fa62f68d7347 diff --git a/libsysio/src/file.c b/libsysio/src/file.c index bffc3fd..fbd91d8 100644 --- a/libsysio/src/file.c +++ b/libsysio/src/file.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include "sysio.h" @@ -74,7 +75,8 @@ _sysio_fnew(struct inode *ino, int flags) return NULL; _SYSIO_FINIT(fil, ino, flags); - I_REF(ino); + F_REF(fil); + I_REF(fil->f_ino); return fil; } @@ -91,6 +93,7 @@ _sysio_fgone(struct file *fil) assert(fil->f_ino); err = (*fil->f_ino->i_ops.inop_close)(fil->f_ino); assert(!err); + I_RELE(fil->f_ino); free(fil); } @@ -271,7 +274,7 @@ _sysio_fd_dup(int oldfd, int newfd, int force) struct file *fil; int fd; - if (oldfd == newfd) + if (oldfd == newfd && oldfd >= 0) return newfd; fil = _sysio_fd_find(oldfd);