On Fri, Dec 17, 2010 at 11:03:46AM +0100, Thomas Gleixner wrote: > So you could do the following: ... > static int get_posix_clock(const clockid_t id, struct posix_clock_descr *cd) > { > struct file *fp = fget(CLOCKID_TO_FD(id)); > int ret; > > if (!fp || fp->f_op->open != posix_clock_open || !fp->private_data) > return -ENODEV; > ret = get_fd_clk(cd, fp); > if (ret) > fput(fp); > return ret; > } In order to avoid leaking a fp reference, shouldn't this go like: static int get_posix_clock(const clockid_t id, struct posix_clock_desc *cd) { struct file *fp = fget(CLOCKID_TO_FD(id)); int ret = -EINVAL; if (!fp) return ret; if (fp->f_op->open != posix_clock_open || !fp->private_data) goto out; ret = get_fd_clk(cd, fp); out: if (ret) fput(fp); return ret; } Thanks again for your help, Richard -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html