On Wed, May 11, 2016 at 5:54 PM, James Simmons <jsimmons@xxxxxxxxxxxxx> wrote: > While looking at porting lustre to use xattr handlers I > noticed issues in generic_listxattr() when handle->list() > is used. The function generic_listxattr() generates it > results from the handle->name field. If the current handle > name field is NULL then generic_listxattr() will call > handle->list() if it exist. generic_listxattr() is different from generic_getxattr() / generic_setxattr() / generic_removexattr. It makes sense only for filesystems that support a fixed set of xattrs, which means that all handlers will have handler->name set. If any of the handlers has handler->prefix set instead, that handler matches a whole set of attributes. Generic_listxattr() would have to fill in all of those names matching that handler, but it doesn't know which those are. It is common for filesystems to have their own listxattr inode operation and still use generic_{get,set,remove}xattr. > Calling handle->list() has no > affect on the output since their is no way to set the > name field of the handler. This patch allows the passing > in of the handler to *list() so the handle->name field > can be set. No, that's broken. The handlers pointed at by sb->s_xattr must not be modified. Doing so would mess up all other concurrent getxattr / setxattr / listxattr / removexattr operations on that superblock. Andreas -- To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html