On Mon, Apr 21, 2014 at 09:01:37AM -0400, Trond Myklebust wrote: > > > +static struct file *find_readable_file(struct nfs4_file *f) > > > +{ > > > + struct file *ret; > > > + > > > + spin_lock(&f->fi_lock); > > > + ret = __nfs4_get_fd(f, O_RDONLY); > > > + if (!ret) > > > + ret = __nfs4_get_fd(f, O_RDWR); > > > + spin_unlock(&f->fi_lock); > > > + return ret; > > > > Seems like these two functions could be easily consolidated by passing > > a single flags argument. > > Yes, but we'd have to invent a new set of flags for just this function > and so I'm not sure that the end result would be more readable. > We can't reuse O_RDONLY/O_WRONLY/O_RDWR since they can't be bitwise ORed > to produce the 'read or read/write', 'write or read/write' combinations > that we need. One option would be: static struct file *__nfs4_get_fd(struct nfs4_file *f, int oflag, int type) { if ((oflag & type) && f->fi_fds[type]) return get_file(f->fi_fds[type]); return NULL; } struct file *nfsd4_find_file(struct nfs4_file *f, unsigned int oflag) { struct file *ret; BUG_ON(oflag & ~(O_RDONLY|O_WRONLY|O_RDWR); spin_lock(&f->fi_lock); ret = __nfs4_get_fd(f, oflag, O_RDONLY); if (!ret) { ret = __nfs4_get_fd(f, oflag, O_WRONLY); if (!ret) ret = __nfs4_get_fd(f, oflag, O_RDWR); } spin_unlock(&f->fi_lock); return ret; } -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html