X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libsysio%2Fsrc%2Ffile.c;h=9ed054ed27f19343603c5baff7fe675da8a84c09;hb=0c7b880305305499dd75524bd2a45765029ddf43;hp=a3464135ccd2684c4c48951b0d70a84008d7ec5c;hpb=567285197e592000b7a713d65b66e27314a11c2f;p=fs%2Flustre-release.git diff --git a/libsysio/src/file.c b/libsysio/src/file.c index a346413..9ed054e 100644 --- a/libsysio/src/file.c +++ b/libsysio/src/file.c @@ -75,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; } @@ -92,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); } @@ -147,7 +149,7 @@ fd_grow(size_t n) return 0; } -#if ZERO_SUM_MEMORY +#ifdef ZERO_SUM_MEMORY void _sysio_fd_shutdown() { @@ -272,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);