]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ext4/xattr.c
Merge branches 'work.iov_iter', 'work.copy_file_range', 'work.xattr' and 'work.symlin...
[karo-tx-linux.git] / fs / ext4 / xattr.c
index 6b6b3e751f8c77ebc9089c412f9019b4774a4301..a95151e875bdcb384d3f5e46d6532828820fb086 100644 (file)
                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)
@@ -404,19 +402,24 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
                const struct xattr_handler *handler =
                        ext4_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)
                                        return -ERANGE;
-                               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;
                }
        }
-       return buffer_size - rest;
+       return buffer_size - rest;  /* total size */
 }
 
 static int