mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 21:19:04 -04:00
Performance improvements in SEEK_DATA and xattr scalability
improvements, plus a lot of clean ups and bug fixes. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAABCAAGBQJW6c9mAAoJEPL5WVaVDYGjWsEIAJkWUvKB3GgGgP82sKDBP2P8 IbWegO1ICMrSY78BqLI7mLCqggH5JClBgYU3O4VFv8Brj1L9mS5X+vflaDE1j9jj Ik1KZKtZl1opOwO1L3D4l/ipZAiENUp7NehTtpsFousmz6nMZ5vo6x4t3QSwbUIm YXpxUIxHEhBcW5i3EDkfYG8305V5oj8HsVf6T98OlWGpBO5VGNMAHvA7CQdQe7Rd chv70rij5V684bJAEoosEFXVAuOUrxcBqbFA3Nlb432YOPj0ISLx76kw0GIjUYtf yjoSClbRgwxGzh0jm+yaoYjjm83xbsYbHSsBmh3+/QLMbKTLXeCqR/BiqJavmcM= =bWpz -----END PGP SIGNATURE----- Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4 Pull ext4 updates from Ted Ts'o: "Performance improvements in SEEK_DATA and xattr scalability improvements, plus a lot of clean ups and bug fixes" * tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (38 commits) ext4: clean up error handling in the MMP support jbd2: do not fail journal because of frozen_buffer allocation failure ext4: use __GFP_NOFAIL in ext4_free_blocks() ext4: fix compile error while opening the macro DOUBLE_CHECK ext4: print ext4 mount option data_err=abort correctly ext4: fix NULL pointer dereference in ext4_mark_inode_dirty() ext4: drop unneeded BUFFER_TRACE in ext4_delete_inline_entry() ext4: fix misspellings in comments. jbd2: fix FS corruption possibility in jbd2_journal_destroy() on umount path ext4: more efficient SEEK_DATA implementation ext4: cleanup handling of bh->b_state in DAX mmap ext4: return hole from ext4_map_blocks() ext4: factor out determining of hole size ext4: fix setting of referenced bit in ext4_es_lookup_extent() ext4: remove i_ioend_count ext4: simplify io_end handling for AIO DIO ext4: move trans handling and completion deferal out of _ext4_get_block ext4: rename and split get blocks functions ext4: use i_mutex to serialize unaligned AIO DIO ext4: pack ioend structure better ...
This commit is contained in:
commit
faeb20ecfa
29 changed files with 1149 additions and 1518 deletions
|
|
@ -200,7 +200,7 @@ typedef struct journal_block_tag_s
|
|||
__be32 t_blocknr_high; /* most-significant high 32bits. */
|
||||
} journal_block_tag_t;
|
||||
|
||||
/* Tail of descriptor block, for checksumming */
|
||||
/* Tail of descriptor or revoke block, for checksumming */
|
||||
struct jbd2_journal_block_tail {
|
||||
__be32 t_checksum; /* crc32c(uuid+descr_block) */
|
||||
};
|
||||
|
|
@ -215,11 +215,6 @@ typedef struct jbd2_journal_revoke_header_s
|
|||
__be32 r_count; /* Count of bytes used in the block */
|
||||
} jbd2_journal_revoke_header_t;
|
||||
|
||||
/* Tail of revoke block, for checksumming */
|
||||
struct jbd2_journal_revoke_tail {
|
||||
__be32 r_checksum; /* crc32c(uuid+revoke_block) */
|
||||
};
|
||||
|
||||
/* Definitions for the journal tag flags word: */
|
||||
#define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */
|
||||
#define JBD2_FLAG_SAME_UUID 2 /* block has same uuid as previous */
|
||||
|
|
@ -1137,7 +1132,8 @@ static inline void jbd2_unfile_log_bh(struct buffer_head *bh)
|
|||
}
|
||||
|
||||
/* Log buffer allocation */
|
||||
struct buffer_head *jbd2_journal_get_descriptor_buffer(journal_t *journal);
|
||||
struct buffer_head *jbd2_journal_get_descriptor_buffer(transaction_t *, int);
|
||||
void jbd2_descriptor_block_csum_set(journal_t *, struct buffer_head *);
|
||||
int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
|
||||
int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
|
||||
unsigned long *block);
|
||||
|
|
@ -1327,10 +1323,8 @@ extern int jbd2_journal_init_revoke_caches(void);
|
|||
extern void jbd2_journal_destroy_revoke(journal_t *);
|
||||
extern int jbd2_journal_revoke (handle_t *, unsigned long long, struct buffer_head *);
|
||||
extern int jbd2_journal_cancel_revoke(handle_t *, struct journal_head *);
|
||||
extern void jbd2_journal_write_revoke_records(journal_t *journal,
|
||||
transaction_t *transaction,
|
||||
struct list_head *log_bufs,
|
||||
int write_op);
|
||||
extern void jbd2_journal_write_revoke_records(transaction_t *transaction,
|
||||
struct list_head *log_bufs);
|
||||
|
||||
/* Recovery revoke support */
|
||||
extern int jbd2_journal_set_revoke(journal_t *, unsigned long long, tid_t);
|
||||
|
|
|
|||
|
|
@ -1,55 +1,52 @@
|
|||
/*
|
||||
File: linux/mbcache.h
|
||||
#ifndef _LINUX_MBCACHE_H
|
||||
#define _LINUX_MBCACHE_H
|
||||
|
||||
#include <linux/hash.h>
|
||||
#include <linux/list_bl.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
struct mb_cache;
|
||||
|
||||
(C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
|
||||
*/
|
||||
struct mb_cache_entry {
|
||||
struct list_head e_lru_list;
|
||||
struct mb_cache *e_cache;
|
||||
unsigned short e_used;
|
||||
unsigned short e_queued;
|
||||
atomic_t e_refcnt;
|
||||
struct block_device *e_bdev;
|
||||
sector_t e_block;
|
||||
struct hlist_bl_node e_block_list;
|
||||
struct {
|
||||
struct hlist_bl_node o_list;
|
||||
unsigned int o_key;
|
||||
} e_index;
|
||||
struct hlist_bl_head *e_block_hash_p;
|
||||
struct hlist_bl_head *e_index_hash_p;
|
||||
/* List of entries in cache - protected by cache->c_list_lock */
|
||||
struct list_head e_list;
|
||||
/* Hash table list - protected by hash chain bitlock */
|
||||
struct hlist_bl_node e_hash_list;
|
||||
atomic_t e_refcnt;
|
||||
/* Key in hash - stable during lifetime of the entry */
|
||||
u32 e_key;
|
||||
u32 e_referenced:1;
|
||||
u32 e_reusable:1;
|
||||
/* Block number of hashed block - stable during lifetime of the entry */
|
||||
sector_t e_block;
|
||||
};
|
||||
|
||||
struct mb_cache {
|
||||
struct list_head c_cache_list;
|
||||
const char *c_name;
|
||||
atomic_t c_entry_count;
|
||||
int c_max_entries;
|
||||
int c_bucket_bits;
|
||||
struct kmem_cache *c_entry_cache;
|
||||
struct hlist_bl_head *c_block_hash;
|
||||
struct hlist_bl_head *c_index_hash;
|
||||
};
|
||||
struct mb_cache *mb_cache_create(int bucket_bits);
|
||||
void mb_cache_destroy(struct mb_cache *cache);
|
||||
|
||||
/* Functions on caches */
|
||||
int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
|
||||
sector_t block, bool reusable);
|
||||
void __mb_cache_entry_free(struct mb_cache_entry *entry);
|
||||
static inline int mb_cache_entry_put(struct mb_cache *cache,
|
||||
struct mb_cache_entry *entry)
|
||||
{
|
||||
if (!atomic_dec_and_test(&entry->e_refcnt))
|
||||
return 0;
|
||||
__mb_cache_entry_free(entry);
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct mb_cache *mb_cache_create(const char *, int);
|
||||
void mb_cache_shrink(struct block_device *);
|
||||
void mb_cache_destroy(struct mb_cache *);
|
||||
|
||||
/* Functions on cache entries */
|
||||
|
||||
struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t);
|
||||
int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
|
||||
sector_t, unsigned int);
|
||||
void mb_cache_entry_release(struct mb_cache_entry *);
|
||||
void mb_cache_entry_free(struct mb_cache_entry *);
|
||||
struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *,
|
||||
struct block_device *,
|
||||
sector_t);
|
||||
void mb_cache_entry_delete_block(struct mb_cache *cache, u32 key,
|
||||
sector_t block);
|
||||
struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *cache, u32 key,
|
||||
sector_t block);
|
||||
struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache,
|
||||
struct block_device *,
|
||||
unsigned int);
|
||||
struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *,
|
||||
struct block_device *,
|
||||
unsigned int);
|
||||
u32 key);
|
||||
struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache *cache,
|
||||
struct mb_cache_entry *entry);
|
||||
void mb_cache_entry_touch(struct mb_cache *cache,
|
||||
struct mb_cache_entry *entry);
|
||||
|
||||
#endif /* _LINUX_MBCACHE_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue