On Fri, Oct 04, 2024 at 11:28:11PM +0100, Al Viro wrote: > > /* > > * Overlay file f_pos is the master copy that is preserved > > * through copy up and modified on read/write, but only real > > * fs knows how to SEEK_HOLE/SEEK_DATA and real fs may impose > > * limitations that are more strict than ->s_maxbytes for specific > > * files, so we use the real file to perform seeks. > > */ > > ovl_inode_lock(inode); > > fd_file(real)->f_pos = file->f_pos; > > in ovl_llseek()? Get ovl_real_fdget_meta() called by ovl_real_fdget() and > > have it return 0 with NULL in fd_file(real), and you've got an oops right > > there, don't you? > > I see... so you rely upon that thing never happening when the last argument of > ovl_real_fdget_meta() is false, including the call from ovl_real_fdget(). > > I still don't like the calling conventions, TBH. Let me think a bit... Sorry, I'm afraid I'll have to leave that until tomorrow - over 38C after the sodding shingles shot really screws the ability to dig through the code ;-/ My apologies...