diff options
author | Mike Marshall <hubcap@omnibond.com> | 2016-03-14 20:39:42 +0100 |
---|---|---|
committer | Mike Marshall <hubcap@omnibond.com> | 2016-03-14 20:39:42 +0100 |
commit | ab6652524aaf834d5dcdb46dd7695813b8d63da5 (patch) | |
tree | bb3876a9b61254be902416f7dbf578deb28e9f22 /fs/ext2/xattr.c | |
parent | orangefs: make fs_mount_pending static (diff) | |
parent | Linux 4.5 (diff) | |
download | linux-ab6652524aaf834d5dcdb46dd7695813b8d63da5.tar.xz linux-ab6652524aaf834d5dcdb46dd7695813b8d63da5.zip |
Orangefs: merge to v4.5
Merge tag 'v4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into current
Linux 4.5
Diffstat (limited to 'fs/ext2/xattr.c')
-rw-r--r-- | fs/ext2/xattr.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c index fa70848afa8f..f57a7aba32eb 100644 --- a/fs/ext2/xattr.c +++ b/fs/ext2/xattr.c @@ -77,10 +77,8 @@ printk("\n"); \ } while (0) # define ea_bdebug(bh, f...) do { \ - char b[BDEVNAME_SIZE]; \ - printk(KERN_DEBUG "block %s:%lu: ", \ - bdevname(bh->b_bdev, b), \ - (unsigned long) bh->b_blocknr); \ + printk(KERN_DEBUG "block %pg:%lu: ", \ + bh->b_bdev, (unsigned long) bh->b_blocknr); \ printk(f); \ printk("\n"); \ } while (0) @@ -292,16 +290,21 @@ bad_block: ext2_error(inode->i_sb, "ext2_xattr_list", const struct xattr_handler *handler = ext2_xattr_handler(entry->e_name_index); - if (handler) { - size_t size = handler->list(handler, dentry, buffer, - rest, entry->e_name, - entry->e_name_len); + if (handler && (!handler->list || handler->list(dentry))) { + const char *prefix = handler->prefix ?: handler->name; + size_t prefix_len = strlen(prefix); + size_t size = prefix_len + entry->e_name_len + 1; + if (buffer) { if (size > rest) { error = -ERANGE; goto cleanup; } - buffer += size; + memcpy(buffer, prefix, prefix_len); + buffer += prefix_len; + memcpy(buffer, entry->e_name, entry->e_name_len); + buffer += entry->e_name_len; + *buffer++ = 0; } rest -= size; } |