Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/811898/?format=api
{ "id": 811898, "url": "http://patchwork.ozlabs.org/api/patches/811898/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170909002556.23382-4-cascardo@canonical.com/", "project": { "id": 15, "url": "http://patchwork.ozlabs.org/api/projects/15/?format=api", "name": "Ubuntu Kernel", "link_name": "ubuntu-kernel", "list_id": "kernel-team.lists.ubuntu.com", "list_email": "kernel-team@lists.ubuntu.com", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170909002556.23382-4-cascardo@canonical.com>", "list_archive_url": null, "date": "2017-09-09T00:25:56", "name": "[xenial,CVE-2015-8952,3/3] ext4: convert to mbcache2", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b06fa9c1aed52de0f3a4ec2ea9bf96e1812a01a3", "submitter": { "id": 70574, "url": "http://patchwork.ozlabs.org/api/people/70574/?format=api", "name": "Thadeu Lima de Souza Cascardo", "email": "cascardo@canonical.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170909002556.23382-4-cascardo@canonical.com/mbox/", "series": [ { "id": 2317, "url": "http://patchwork.ozlabs.org/api/series/2317/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=2317", "date": "2017-09-09T00:25:53", "name": "replace mbcache with mbcache2 for ext2/ext4", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2317/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/811898/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/811898/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<kernel-team-bounces@lists.ubuntu.com>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com\n\t(client-ip=91.189.94.19; helo=huckleberry.canonical.com;\n\tenvelope-from=kernel-team-bounces@lists.ubuntu.com;\n\treceiver=<UNKNOWN>)", "Received": [ "from huckleberry.canonical.com (huckleberry.canonical.com\n\t[91.189.94.19])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpw4y1kGsz9s8J;\n\tSat, 9 Sep 2017 10:27:46 +1000 (AEST)", "from localhost ([127.0.0.1] helo=huckleberry.canonical.com)\n\tby huckleberry.canonical.com with esmtp (Exim 4.86_2)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1dqTcd-0004m0-Aa; Sat, 09 Sep 2017 00:27:43 +0000", "from youngberry.canonical.com ([91.189.89.112])\n\tby huckleberry.canonical.com with esmtps\n\t(TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128)\n\t(Exim 4.86_2) (envelope-from <cascardo@canonical.com>)\n\tid 1dqTca-0004kD-IX\n\tfor kernel-team@lists.ubuntu.com; Sat, 09 Sep 2017 00:27:40 +0000", "from 1.general.cascardo.us.vpn ([10.172.70.58]\n\thelo=localhost.localdomain)\n\tby youngberry.canonical.com with esmtpsa\n\t(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.76) (envelope-from <cascardo@canonical.com>)\n\tid 1dqTcZ-0008Qv-SV\n\tfor kernel-team@lists.ubuntu.com; Sat, 09 Sep 2017 00:27:40 +0000" ], "From": "Thadeu Lima de Souza Cascardo <cascardo@canonical.com>", "To": "kernel-team@lists.ubuntu.com", "Subject": "[xenial CVE-2015-8952 3/3] ext4: convert to mbcache2", "Date": "Fri, 8 Sep 2017 21:25:56 -0300", "Message-Id": "<20170909002556.23382-4-cascardo@canonical.com>", "X-Mailer": "git-send-email 2.11.0", "In-Reply-To": "<20170909002556.23382-1-cascardo@canonical.com>", "References": "<20170909002556.23382-1-cascardo@canonical.com>", "X-BeenThere": "kernel-team@lists.ubuntu.com", "X-Mailman-Version": "2.1.20", "Precedence": "list", "List-Id": "Kernel team discussions <kernel-team.lists.ubuntu.com>", "List-Unsubscribe": "<https://lists.ubuntu.com/mailman/options/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>", "List-Archive": "<https://lists.ubuntu.com/archives/kernel-team>", "List-Post": "<mailto:kernel-team@lists.ubuntu.com>", "List-Help": "<mailto:kernel-team-request@lists.ubuntu.com?subject=help>", "List-Subscribe": "<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "kernel-team-bounces@lists.ubuntu.com", "Sender": "\"kernel-team\" <kernel-team-bounces@lists.ubuntu.com>" }, "content": "From: Jan Kara <jack@suse.cz>\n\nThe conversion is generally straightforward. The only tricky part is\nthat xattr block corresponding to found mbcache entry can get freed\nbefore we get buffer lock for that block. So we have to check whether\nthe entry is still valid after getting buffer lock.\n\nSigned-off-by: Jan Kara <jack@suse.cz>\nSigned-off-by: Theodore Ts'o <tytso@mit.edu>\n(backported from commit 82939d7999dfc1f1998c4b1c12e2f19edbdff272)\nCVE-2015-8952\nSigned-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>\n---\n fs/ext4/ext4.h | 2 +-\n fs/ext4/super.c | 7 ++-\n fs/ext4/xattr.c | 136 ++++++++++++++++++++++++++++----------------------------\n fs/ext4/xattr.h | 5 +--\n 4 files changed, 75 insertions(+), 75 deletions(-)", "diff": "diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h\nindex 331f82510d15..25e36e527b0e 100644\n--- a/fs/ext4/ext4.h\n+++ b/fs/ext4/ext4.h\n@@ -1441,7 +1441,7 @@ struct ext4_sb_info {\n \tstruct list_head s_es_list;\t/* List of inodes with reclaimable extents */\n \tlong s_es_nr_inode;\n \tstruct ext4_es_stats s_es_stats;\n-\tstruct mb_cache *s_mb_cache;\n+\tstruct mb2_cache *s_mb_cache;\n \tspinlock_t s_es_lock ____cacheline_aligned_in_smp;\n \n \t/* Ratelimit ext4 messages. */\ndiff --git a/fs/ext4/super.c b/fs/ext4/super.c\nindex 029296aa42f3..32a0c1ac0e3d 100644\n--- a/fs/ext4/super.c\n+++ b/fs/ext4/super.c\n@@ -821,7 +821,6 @@ static void ext4_put_super(struct super_block *sb)\n \text4_release_system_zone(sb);\n \text4_mb_release(sb);\n \text4_ext_release(sb);\n-\text4_xattr_put_super(sb);\n \n \tif (!(sb->s_flags & MS_RDONLY) && !aborted) {\n \t\text4_clear_feature_journal_needs_recovery(sb);\n@@ -3868,7 +3867,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)\n \n no_journal:\n \tif (ext4_mballoc_ready) {\n-\t\tsbi->s_mb_cache = ext4_xattr_create_cache(sb->s_id);\n+\t\tsbi->s_mb_cache = ext4_xattr_create_cache();\n \t\tif (!sbi->s_mb_cache) {\n \t\t\text4_msg(sb, KERN_ERR, \"Failed to create an mb_cache\");\n \t\t\tgoto failed_mount_wq;\n@@ -4100,6 +4099,10 @@ failed_mount4:\n \tif (EXT4_SB(sb)->rsv_conversion_wq)\n \t\tdestroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq);\n failed_mount_wq:\n+\tif (sbi->s_mb_cache) {\n+\t\text4_xattr_destroy_cache(sbi->s_mb_cache);\n+\t\tsbi->s_mb_cache = NULL;\n+\t}\n \tif (sbi->s_journal) {\n \t\tjbd2_journal_destroy(sbi->s_journal);\n \t\tsbi->s_journal = NULL;\ndiff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c\nindex 571166eb1dfc..ba6b8ac5f462 100644\n--- a/fs/ext4/xattr.c\n+++ b/fs/ext4/xattr.c\n@@ -53,7 +53,7 @@\n #include <linux/init.h>\n #include <linux/fs.h>\n #include <linux/slab.h>\n-#include <linux/mbcache.h>\n+#include <linux/mbcache2.h>\n #include <linux/quotaops.h>\n #include \"ext4_jbd2.h\"\n #include \"ext4.h\"\n@@ -80,10 +80,10 @@\n # define ea_bdebug(bh, fmt, ...)\tno_printk(fmt, ##__VA_ARGS__)\n #endif\n \n-static void ext4_xattr_cache_insert(struct mb_cache *, struct buffer_head *);\n+static void ext4_xattr_cache_insert(struct mb2_cache *, struct buffer_head *);\n static struct buffer_head *ext4_xattr_cache_find(struct inode *,\n \t\t\t\t\t\t struct ext4_xattr_header *,\n-\t\t\t\t\t\t struct mb_cache_entry **);\n+\t\t\t\t\t\t struct mb2_cache_entry **);\n static void ext4_xattr_rehash(struct ext4_xattr_header *,\n \t\t\t struct ext4_xattr_entry *);\n static int ext4_xattr_list(struct dentry *dentry, char *buffer,\n@@ -295,7 +295,7 @@ ext4_xattr_block_get(struct inode *inode, int name_index, const char *name,\n \tstruct ext4_xattr_entry *entry;\n \tsize_t size;\n \tint error;\n-\tstruct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n+\tstruct mb2_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n \n \tea_idebug(inode, \"name=%d.%s, buffer=%p, buffer_size=%ld\",\n \t\t name_index, name, buffer, (long)buffer_size);\n@@ -442,7 +442,7 @@ ext4_xattr_block_list(struct dentry *dentry, char *buffer, size_t buffer_size)\n \tstruct inode *inode = d_inode(dentry);\n \tstruct buffer_head *bh = NULL;\n \tint error;\n-\tstruct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n+\tstruct mb2_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n \n \tea_idebug(inode, \"buffer=%p, buffer_size=%ld\",\n \t\t buffer, (long)buffer_size);\n@@ -559,11 +559,8 @@ static void\n ext4_xattr_release_block(handle_t *handle, struct inode *inode,\n \t\t\t struct buffer_head *bh)\n {\n-\tstruct mb_cache_entry *ce = NULL;\n \tint error = 0;\n-\tstruct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n \n-\tce = mb_cache_entry_get(ext4_mb_cache, bh->b_bdev, bh->b_blocknr);\n \tBUFFER_TRACE(bh, \"get_write_access\");\n \terror = ext4_journal_get_write_access(handle, bh);\n \tif (error)\n@@ -571,9 +568,15 @@ ext4_xattr_release_block(handle_t *handle, struct inode *inode,\n \n \tlock_buffer(bh);\n \tif (BHDR(bh)->h_refcount == cpu_to_le32(1)) {\n+\t\t__u32 hash = le32_to_cpu(BHDR(bh)->h_hash);\n+\n \t\tea_bdebug(bh, \"refcount now=0; freeing\");\n-\t\tif (ce)\n-\t\t\tmb_cache_entry_free(ce);\n+\t\t/*\n+\t\t * This must happen under buffer lock for\n+\t\t * ext4_xattr_block_set() to reliably detect freed block\n+\t\t */\n+\t\tmb2_cache_entry_delete_block(EXT4_GET_MB_CACHE(inode), hash,\n+\t\t\t\t\t bh->b_blocknr);\n \t\tget_bh(bh);\n \t\tunlock_buffer(bh);\n \t\text4_free_blocks(handle, inode, bh, 0, 1,\n@@ -581,8 +584,6 @@ ext4_xattr_release_block(handle_t *handle, struct inode *inode,\n \t\t\t\t EXT4_FREE_BLOCKS_FORGET);\n \t} else {\n \t\tle32_add_cpu(&BHDR(bh)->h_refcount, -1);\n-\t\tif (ce)\n-\t\t\tmb_cache_entry_release(ce);\n \n \t\text4_xattr_block_csum_set(inode, bh);\n \t\t/*\n@@ -795,17 +796,15 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,\n \tstruct super_block *sb = inode->i_sb;\n \tstruct buffer_head *new_bh = NULL;\n \tstruct ext4_xattr_search *s = &bs->s;\n-\tstruct mb_cache_entry *ce = NULL;\n+\tstruct mb2_cache_entry *ce = NULL;\n \tint error = 0;\n-\tstruct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n+\tstruct mb2_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n \n #define header(x) ((struct ext4_xattr_header *)(x))\n \n \tif (i->value && i->value_len > sb->s_blocksize)\n \t\treturn -ENOSPC;\n \tif (s->base) {\n-\t\tce = mb_cache_entry_get(ext4_mb_cache, bs->bh->b_bdev,\n-\t\t\t\t\tbs->bh->b_blocknr);\n \t\tBUFFER_TRACE(bs->bh, \"get_write_access\");\n \t\terror = ext4_journal_get_write_access(handle, bs->bh);\n \t\tif (error)\n@@ -813,10 +812,15 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,\n \t\tlock_buffer(bs->bh);\n \n \t\tif (header(s->base)->h_refcount == cpu_to_le32(1)) {\n-\t\t\tif (ce) {\n-\t\t\t\tmb_cache_entry_free(ce);\n-\t\t\t\tce = NULL;\n-\t\t\t}\n+\t\t\t__u32 hash = le32_to_cpu(BHDR(bs->bh)->h_hash);\n+\n+\t\t\t/*\n+\t\t\t * This must happen under buffer lock for\n+\t\t\t * ext4_xattr_block_set() to reliably detect modified\n+\t\t\t * block\n+\t\t\t */\n+\t\t\tmb2_cache_entry_delete_block(ext4_mb_cache, hash,\n+\t\t\t\t\t\t bs->bh->b_blocknr);\n \t\t\tea_bdebug(bs->bh, \"modifying in-place\");\n \t\t\terror = ext4_xattr_set_entry(i, s);\n \t\t\tif (!error) {\n@@ -841,10 +845,6 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,\n \t\t\tint offset = (char *)s->here - bs->bh->b_data;\n \n \t\t\tunlock_buffer(bs->bh);\n-\t\t\tif (ce) {\n-\t\t\t\tmb_cache_entry_release(ce);\n-\t\t\t\tce = NULL;\n-\t\t\t}\n \t\t\tea_bdebug(bs->bh, \"cloning\");\n \t\t\ts->base = kmalloc(bs->bh->b_size, GFP_NOFS);\n \t\t\terror = -ENOMEM;\n@@ -899,6 +899,31 @@ inserted:\n \t\t\t\tif (error)\n \t\t\t\t\tgoto cleanup_dquot;\n \t\t\t\tlock_buffer(new_bh);\n+\t\t\t\t/*\n+\t\t\t\t * We have to be careful about races with\n+\t\t\t\t * freeing or rehashing of xattr block. Once we\n+\t\t\t\t * hold buffer lock xattr block's state is\n+\t\t\t\t * stable so we can check whether the block got\n+\t\t\t\t * freed / rehashed or not. Since we unhash\n+\t\t\t\t * mbcache entry under buffer lock when freeing\n+\t\t\t\t * / rehashing xattr block, checking whether\n+\t\t\t\t * entry is still hashed is reliable.\n+\t\t\t\t */\n+\t\t\t\tif (hlist_bl_unhashed(&ce->e_hash_list)) {\n+\t\t\t\t\t/*\n+\t\t\t\t\t * Undo everything and check mbcache\n+\t\t\t\t\t * again.\n+\t\t\t\t\t */\n+\t\t\t\t\tunlock_buffer(new_bh);\n+\t\t\t\t\tdquot_free_block(inode,\n+\t\t\t\t\t\t\t EXT4_C2B(EXT4_SB(sb),\n+\t\t\t\t\t\t\t\t 1));\n+\t\t\t\t\tbrelse(new_bh);\n+\t\t\t\t\tmb2_cache_entry_put(ext4_mb_cache, ce);\n+\t\t\t\t\tce = NULL;\n+\t\t\t\t\tnew_bh = NULL;\n+\t\t\t\t\tgoto inserted;\n+\t\t\t\t}\n \t\t\t\tle32_add_cpu(&BHDR(new_bh)->h_refcount, 1);\n \t\t\t\tea_bdebug(new_bh, \"reusing; refcount now=%d\",\n \t\t\t\t\tle32_to_cpu(BHDR(new_bh)->h_refcount));\n@@ -910,7 +935,8 @@ inserted:\n \t\t\t\tif (error)\n \t\t\t\t\tgoto cleanup_dquot;\n \t\t\t}\n-\t\t\tmb_cache_entry_release(ce);\n+\t\t\tmb2_cache_entry_touch(ext4_mb_cache, ce);\n+\t\t\tmb2_cache_entry_put(ext4_mb_cache, ce);\n \t\t\tce = NULL;\n \t\t} else if (bs->bh && s->base == bs->bh->b_data) {\n \t\t\t/* We were modifying this block in-place. */\n@@ -976,7 +1002,7 @@ getblk_failed:\n \n cleanup:\n \tif (ce)\n-\t\tmb_cache_entry_release(ce);\n+\t\tmb2_cache_entry_put(ext4_mb_cache, ce);\n \tbrelse(new_bh);\n \tif (!(bs->bh && s->base == bs->bh->b_data))\n \t\tkfree(s->base);\n@@ -1541,17 +1567,6 @@ cleanup:\n }\n \n /*\n- * ext4_xattr_put_super()\n- *\n- * This is called when a file system is unmounted.\n- */\n-void\n-ext4_xattr_put_super(struct super_block *sb)\n-{\n-\tmb_cache_shrink(sb->s_bdev);\n-}\n-\n-/*\n * ext4_xattr_cache_insert()\n *\n * Create a new entry in the extended attribute cache, and insert\n@@ -1560,28 +1575,18 @@ ext4_xattr_put_super(struct super_block *sb)\n * Returns 0, or a negative error number on failure.\n */\n static void\n-ext4_xattr_cache_insert(struct mb_cache *ext4_mb_cache, struct buffer_head *bh)\n+ext4_xattr_cache_insert(struct mb2_cache *ext4_mb_cache, struct buffer_head *bh)\n {\n \t__u32 hash = le32_to_cpu(BHDR(bh)->h_hash);\n-\tstruct mb_cache_entry *ce;\n \tint error;\n \n-\tce = mb_cache_entry_alloc(ext4_mb_cache, GFP_NOFS);\n-\tif (!ce) {\n-\t\tea_bdebug(bh, \"out of memory\");\n-\t\treturn;\n-\t}\n-\terror = mb_cache_entry_insert(ce, bh->b_bdev, bh->b_blocknr, hash);\n+\terror = mb2_cache_entry_create(ext4_mb_cache, GFP_NOFS, hash,\n+\t\t\t\t bh->b_blocknr);\n \tif (error) {\n-\t\tmb_cache_entry_free(ce);\n-\t\tif (error == -EBUSY) {\n+\t\tif (error == -EBUSY)\n \t\t\tea_bdebug(bh, \"already in cache\");\n-\t\t\terror = 0;\n-\t\t}\n-\t} else {\n+\t} else\n \t\tea_bdebug(bh, \"inserting [%x]\", (int)hash);\n-\t\tmb_cache_entry_release(ce);\n-\t}\n }\n \n /*\n@@ -1634,26 +1639,19 @@ ext4_xattr_cmp(struct ext4_xattr_header *header1,\n */\n static struct buffer_head *\n ext4_xattr_cache_find(struct inode *inode, struct ext4_xattr_header *header,\n-\t\t struct mb_cache_entry **pce)\n+\t\t struct mb2_cache_entry **pce)\n {\n \t__u32 hash = le32_to_cpu(header->h_hash);\n-\tstruct mb_cache_entry *ce;\n-\tstruct mb_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n+\tstruct mb2_cache_entry *ce;\n+\tstruct mb2_cache *ext4_mb_cache = EXT4_GET_MB_CACHE(inode);\n \n \tif (!header->h_hash)\n \t\treturn NULL; /* never share */\n \tea_idebug(inode, \"looking for cached blocks [%x]\", (int)hash);\n-again:\n-\tce = mb_cache_entry_find_first(ext4_mb_cache, inode->i_sb->s_bdev,\n-\t\t\t\t hash);\n+\tce = mb2_cache_entry_find_first(ext4_mb_cache, hash);\n \twhile (ce) {\n \t\tstruct buffer_head *bh;\n \n-\t\tif (IS_ERR(ce)) {\n-\t\t\tif (PTR_ERR(ce) == -EAGAIN)\n-\t\t\t\tgoto again;\n-\t\t\tbreak;\n-\t\t}\n \t\tbh = sb_bread(inode->i_sb, ce->e_block);\n \t\tif (!bh) {\n \t\t\tEXT4_ERROR_INODE(inode, \"block %lu read error\",\n@@ -1669,7 +1667,7 @@ again:\n \t\t\treturn bh;\n \t\t}\n \t\tbrelse(bh);\n-\t\tce = mb_cache_entry_find_next(ce, inode->i_sb->s_bdev, hash);\n+\t\tce = mb2_cache_entry_find_next(ext4_mb_cache, ce);\n \t}\n \treturn NULL;\n }\n@@ -1744,15 +1742,15 @@ static void ext4_xattr_rehash(struct ext4_xattr_header *header,\n \n #define\tHASH_BUCKET_BITS\t10\n \n-struct mb_cache *\n-ext4_xattr_create_cache(char *name)\n+struct mb2_cache *\n+ext4_xattr_create_cache(void)\n {\n-\treturn mb_cache_create(name, HASH_BUCKET_BITS);\n+\treturn mb2_cache_create(HASH_BUCKET_BITS);\n }\n \n-void ext4_xattr_destroy_cache(struct mb_cache *cache)\n+void ext4_xattr_destroy_cache(struct mb2_cache *cache)\n {\n \tif (cache)\n-\t\tmb_cache_destroy(cache);\n+\t\tmb2_cache_destroy(cache);\n }\n \ndiff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h\nindex ddc0957760ba..10b0f7323ed6 100644\n--- a/fs/ext4/xattr.h\n+++ b/fs/ext4/xattr.h\n@@ -108,7 +108,6 @@ extern int ext4_xattr_set(struct inode *, int, const char *, const void *, size_\n extern int ext4_xattr_set_handle(handle_t *, struct inode *, int, const char *, const void *, size_t, int);\n \n extern void ext4_xattr_delete_inode(handle_t *, struct inode *);\n-extern void ext4_xattr_put_super(struct super_block *);\n \n extern int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,\n \t\t\t struct ext4_inode *raw_inode, handle_t *handle);\n@@ -124,8 +123,8 @@ extern int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode,\n \t\t\t\t struct ext4_xattr_info *i,\n \t\t\t\t struct ext4_xattr_ibody_find *is);\n \n-extern struct mb_cache *ext4_xattr_create_cache(char *name);\n-extern void ext4_xattr_destroy_cache(struct mb_cache *);\n+extern struct mb2_cache *ext4_xattr_create_cache(void);\n+extern void ext4_xattr_destroy_cache(struct mb2_cache *);\n \n #ifdef CONFIG_EXT4_FS_SECURITY\n extern int ext4_init_security(handle_t *handle, struct inode *inode,\n", "prefixes": [ "xenial", "CVE-2015-8952", "3/3" ] }