On Fri 30-08-24 15:04:55, Christian Brauner wrote: > Store the cookie to detect concurrent seeks on directories in > file->private_data. > > Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> ... > ns = proc_pid_ns(inode->i_sb); > - tid = (int)file->f_version; > - file->f_version = 0; > + tid = (int)(intptr_t)file->private_data; What's the point of first casting to intptr_t? > @@ -3890,7 +3890,7 @@ static int proc_task_readdir(struct file *file, struct dir_context *ctx) > proc_task_instantiate, task, NULL)) { > /* returning this tgid failed, save it as the first > * pid for the next readir call */ > - file->f_version = (u64)tid; > + file->private_data = (void *)(intptr_t)tid; The same here... > put_task_struct(task); > break; > } > @@ -3915,6 +3915,12 @@ static int proc_task_getattr(struct mnt_idmap *idmap, > return 0; > } > > +static loff_t proc_dir_llseek(struct file *file, loff_t offset, int whence) > +{ > + return generic_llseek_cookie(file, offset, whence, > + (u64 *)(uintptr_t)&file->private_data); So this I think is wrong for 32-bit archs because generic_llseek_cookie() will store 8 bytes there while file->private_data has only 4 bytes... Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR