diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-11 13:10:57 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-11 13:10:57 -0700 | 
| commit | 89fd915c402113528750353ad6de9ea68a787e5c (patch) | |
| tree | 03ba8e8e6400e43ef518393259941eae39ee32d8 /fs/ext2 | |
| parent | 66c9457df3926efff65529dab1a8c742df756790 (diff) | |
| parent | 04c3c982fcc0151ed3574d7ae4f1e62278054d72 (diff) | |
Merge tag 'libnvdimm-for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
Pull libnvdimm from Dan Williams:
 "A rework of media error handling in the BTT driver and other updates.
  It has appeared in a few -next releases and collected some late-
  breaking build-error and warning fixups as a result.
  Summary:
   - Media error handling support in the Block Translation Table (BTT)
     driver is reworked to address sleeping-while-atomic locking and
     memory-allocation-context conflicts.
   - The dax_device lookup overhead for xfs and ext4 is moved out of the
     iomap hot-path to a mount-time lookup.
   - A new 'ecc_unit_size' sysfs attribute is added to advertise the
     read-modify-write boundary property of a persistent memory range.
   - Preparatory fix-ups for arm and powerpc pmem support are included
     along with other miscellaneous fixes"
* tag 'libnvdimm-for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: (26 commits)
  libnvdimm, btt: fix format string warnings
  libnvdimm, btt: clean up warning and error messages
  ext4: fix null pointer dereference on sbi
  libnvdimm, nfit: move the check on nd_reserved2 to the endpoint
  dax: fix FS_DAX=n BLOCK=y compilation
  libnvdimm: fix integer overflow static analysis warning
  libnvdimm, nd_blk: remove mmio_flush_range()
  libnvdimm, btt: rework error clearing
  libnvdimm: fix potential deadlock while clearing errors
  libnvdimm, btt: cache sector_size in arena_info
  libnvdimm, btt: ensure that flags were also unchanged during a map_read
  libnvdimm, btt: refactor map entry operations with macros
  libnvdimm, btt: fix a missed NVDIMM_IO_ATOMIC case in the write path
  libnvdimm, nfit: export an 'ecc_unit_size' sysfs attribute
  ext4: perform dax_device lookup at mount
  ext2: perform dax_device lookup at mount
  xfs: perform dax_device lookup at mount
  dax: introduce a fs_dax_get_by_bdev() helper
  libnvdimm, btt: check memory allocation failure
  libnvdimm, label: fix index block size calculation
  ...
Diffstat (limited to 'fs/ext2')
| -rw-r--r-- | fs/ext2/ext2.h | 1 | ||||
| -rw-r--r-- | fs/ext2/inode.c | 11 | ||||
| -rw-r--r-- | fs/ext2/super.c | 4 | 
3 files changed, 8 insertions, 8 deletions
diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index 23ebb92484c6..28de3edd4f4d 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h @@ -114,6 +114,7 @@ struct ext2_sb_info {  	 */  	spinlock_t s_lock;  	struct mb_cache *s_ea_block_cache; +	struct dax_device *s_daxdev;  };  static inline spinlock_t * diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 30163d007b2f..4dca6f348714 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -800,10 +800,10 @@ int ext2_get_block(struct inode *inode, sector_t iblock,  static int ext2_iomap_begin(struct inode *inode, loff_t offset, loff_t length,  		unsigned flags, struct iomap *iomap)  { -	struct block_device *bdev;  	unsigned int blkbits = inode->i_blkbits;  	unsigned long first_block = offset >> blkbits;  	unsigned long max_blocks = (length + (1 << blkbits) - 1) >> blkbits; +	struct ext2_sb_info *sbi = EXT2_SB(inode->i_sb);  	bool new = false, boundary = false;  	u32 bno;  	int ret; @@ -814,13 +814,9 @@ static int ext2_iomap_begin(struct inode *inode, loff_t offset, loff_t length,  		return ret;  	iomap->flags = 0; -	bdev = inode->i_sb->s_bdev; -	iomap->bdev = bdev; +	iomap->bdev = inode->i_sb->s_bdev;  	iomap->offset = (u64)first_block << blkbits; -	if (blk_queue_dax(bdev->bd_queue)) -		iomap->dax_dev = fs_dax_get_by_host(bdev->bd_disk->disk_name); -	else -		iomap->dax_dev = NULL; +	iomap->dax_dev = sbi->s_daxdev;  	if (ret == 0) {  		iomap->type = IOMAP_HOLE; @@ -842,7 +838,6 @@ static int  ext2_iomap_end(struct inode *inode, loff_t offset, loff_t length,  		ssize_t written, unsigned flags, struct iomap *iomap)  { -	fs_put_dax(iomap->dax_dev);  	if (iomap->type == IOMAP_MAPPED &&  	    written < length &&  	    (flags & IOMAP_WRITE)) diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 7b1bc9059863..fc18edd81815 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -171,6 +171,7 @@ static void ext2_put_super (struct super_block * sb)  	brelse (sbi->s_sbh);  	sb->s_fs_info = NULL;  	kfree(sbi->s_blockgroup_lock); +	fs_put_dax(sbi->s_daxdev);  	kfree(sbi);  } @@ -813,6 +814,7 @@ static unsigned long descriptor_loc(struct super_block *sb,  static int ext2_fill_super(struct super_block *sb, void *data, int silent)  { +	struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev);  	struct buffer_head * bh;  	struct ext2_sb_info * sbi;  	struct ext2_super_block * es; @@ -842,6 +844,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)  	}  	sb->s_fs_info = sbi;  	sbi->s_sb_block = sb_block; +	sbi->s_daxdev = dax_dev;  	spin_lock_init(&sbi->s_lock); @@ -1200,6 +1203,7 @@ failed_sbi:  	kfree(sbi->s_blockgroup_lock);  	kfree(sbi);  failed: +	fs_put_dax(dax_dev);  	return ret;  }  | 
