On Mon, Feb 17, 2020 at 01:59:47PM +0100, Christoph Hellwig wrote: > The old xfs_attr_list code is only used by the attrlist by handle > ioctl. Move it to xfs_ioctl.c with its user. Also move the > attrlist and attrlist_ent structure to xfs_fs.h, as they are exposed > user ABIs. They are used through libattr headers with the same name > by at least xfsdump. Also document this relation so that it doesn't > require a research project to figure out. That's a bit nasty. I suspect that also needs documentation in the path_to_handle(3) man page, too. [...] > +int > +xfs_ioc_attr_list( > + struct xfs_inode *dp, > + char *buffer, > + int bufsize, > + int flags, > + struct attrlist_cursor_kern *cursor) > +{ > + struct xfs_attr_list_context context; > + struct xfs_attrlist *alist; > + int error; > + > + /* > + * Validate the cursor. > + */ > + if (cursor->pad1 || cursor->pad2) > + return -EINVAL; > + if ((cursor->initted == 0) && > + (cursor->hashval || cursor->blkno || cursor->offset)) > + return -EINVAL; > + > + /* > + * Check for a properly aligned buffer. > + */ > + if (((long)buffer) & (sizeof(int)-1)) > + return -EFAULT; > + > + /* > + * Initialize the output buffer. > + */ > + memset(&context, 0, sizeof(context)); > + context.dp = dp; > + context.cursor = cursor; > + context.resynch = 1; > + context.flags = flags; > + context.buffer = buffer; > + context.bufsize = (bufsize & ~(sizeof(int)-1)); /* align */ ALIGN()? Otherwise looks OK. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx