From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934765AbdKCDUm convert rfc822-to-8bit (ORCPT ); Thu, 2 Nov 2017 23:20:42 -0400 Received: from mga01.intel.com ([192.55.52.88]:32566 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751507AbdKCDUk (ORCPT ); Thu, 2 Nov 2017 23:20:40 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.44,336,1505804400"; d="scan'208";a="168737122" From: "Williams, Dan J" To: "sfr@canb.auug.org.au" CC: "darrick.wong@oracle.com" , "linux-kernel@vger.kernel.org" , "jack@suse.cz" , "linux-fsdevel@vger.kernel.org" Subject: MAP_SYNC in libnvdimm-for-next and collision fixups Thread-Topic: MAP_SYNC in libnvdimm-for-next and collision fixups Thread-Index: AQHTVFK4QaZgGoYPg0SOqTF9WK72HQ== Date: Fri, 3 Nov 2017 03:20:38 +0000 Message-ID: <1509679236.16079.1.camel@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.89.204] Content-Type: text/plain; charset="utf-7" Content-ID: <1DA76059DE61A845AD959A1498B7A6B9@intel.com> Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Stephen, I've pushed a new libnvdimm-for-next branch that includes the libnvdimm update for 4.15 as well as the MAP+AF8-SYNC patch set for -next exposure. It has some collisions with code already pending in -next. My proposed merge resolution is here: https://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm.git/log/?h+AD0- libnvdimm-vs-next-20171102 --- commit 2adeca04276acb4e747dbe7a5668efe03b164566 Merge: fa8785e862ef c29c91a9daa3 Author: Dan Williams +ADw-dan.j.williams+AEA-intel.com+AD4- Date: Thu Nov 2 19:20:59 2017 -0700 Merge branch 'libnvdimm-for-next' into test diff --cc fs/dax.c index 3652b26a0048,78233c716757..f3a7fb804a50 --- a/fs/dax.c +-+-+- b/fs/dax.c +AEAAQABA- -825,38 -820,42 +-825,42 +AEAAQABA- out +AH0- EXPORT+AF8-SYMBOL+AF8-GPL(dax+AF8-writeback+AF8-mapping+AF8-range)+ADs- - static int dax+AF8-insert+AF8-mapping(struct address+AF8-space +ACo-mapping, - struct block+AF8-device +ACo-bdev, struct dax+AF8-device +ACo-dax+AF8-dev, - sector+AF8-t sector, size+AF8-t size, void +ACo-entry, - struct vm+AF8-area+AF8-struct +ACo-vma, struct vm+AF8-fault +ACo-vmf) +- static sector+AF8-t dax+AF8-iomap+AF8-sector(struct iomap +ACo-iomap, loff+AF8-t pos) +AHs- - unsigned long vaddr +AD0- vmf-+AD4-address+ADs- - void +ACo-ret, +ACo-kaddr+ADs- - return iomap-+AD4-blkno +- (((pos +ACY- PAGE+AF8-MASK) - iomap-+AD4-offset) +AD4APg- 9)+ADs- +-+- return (iomap-+AD4-addr +- (pos +ACY- PAGE+AF8-MASK) - iomap-+AD4-offset) +AD4APg- 9+ADs- +- +AH0- +- +- static int dax+AF8-iomap+AF8-pfn(struct iomap +ACo-iomap, loff+AF8-t pos, size+AF8-t size, +- pfn+AF8-t +ACo-pfnp) +- +AHs- +- const sector+AF8-t sector +AD0- dax+AF8-iomap+AF8-sector(iomap, pos)+ADs- pgoff+AF8-t pgoff+ADs- +- void +ACo-kaddr+ADs- int id, rc+ADs- - pfn+AF8-t pfn+ADs- +- long length+ADs- - rc +AD0- bdev+AF8-dax+AF8-pgoff(bdev, sector, size, +ACY-pgoff)+ADs- +- rc +AD0- bdev+AF8-dax+AF8-pgoff(iomap-+AD4-bdev, sector, size, +ACY-pgoff)+ADs- if (rc) return rc+ADs- - id +AD0- dax+AF8-read+AF8-lock()+ADs- - rc +AD0- dax+AF8-direct+AF8-access(dax+AF8-dev, pgoff, PHYS+AF8-PFN(size), +ACY-kaddr, +ACY-pfn)+ADs- - if (rc +ADw- 0) +AHs- - dax+AF8-read+AF8-unlock(id)+ADs- - return rc+ADs- +- length +AD0- dax+AF8-direct+AF8-access(iomap-+AD4-dax+AF8-dev, pgoff, PHYS+AF8-PFN(size), +- +ACY-kaddr, pfnp)+ADs- +- if (length +ADw- 0) +AHs- +- rc +AD0- length+ADs- +- goto out+ADs- +AH0- +- rc +AD0- -EINVAL+ADs- +- if (PFN+AF8-PHYS(length) +ADw- size) +- goto out+ADs- +- if (pfn+AF8-t+AF8-to+AF8-pfn(+ACo-pfnp) +ACY- (PHYS+AF8-PFN(size)-1)) +- goto out+ADs- +- /+ACo- For larger pages we need devmap +ACo-/ +- if (length +AD4- 1 +ACYAJg- +ACE-pfn+AF8-t+AF8-devmap(+ACo-pfnp)) +- goto out+ADs- +- rc +AD0- 0+ADs- +- out: dax+AF8-read+AF8-unlock(id)+ADs- - - ret +AD0- dax+AF8-insert+AF8-mapping+AF8-entry(mapping, vmf, entry, sector, 0)+ADs- - if (IS+AF8-ERR(ret)) - return PTR+AF8-ERR(ret)+ADs- - - trace+AF8-dax+AF8-insert+AF8-mapping(mapping-+AD4-host, vmf, ret)+ADs- - if (vmf-+AD4-flags +ACY- FAULT+AF8-FLAG+AF8-WRITE) - return vm+AF8-insert+AF8-mixed+AF8-mkwrite(vma, vaddr, pfn)+ADs- - else - return vm+AF8-insert+AF8-mixed(vma, vaddr, pfn)+ADs- +- return rc+ADs- +AH0- /+ACo- diff --cc fs/ext4/inode.c index 59d31fec67ae,13a198924a0f..7250861f0f7b --- a/fs/ext4/inode.c +-+-+- b/fs/ext4/inode.c +AEAAQABA- -3383,6 -3393,20 +-3383,19 +AEAAQABA- static int ext4+AF8-releasepage(struct pag return try+AF8-to+AF8-free+AF8-buffers(page)+ADs- +AH0- -+ACM-ifdef CONFIG+AF8-FS+AF8-DAX +- static bool ext4+AF8-inode+AF8-datasync+AF8-dirty(struct inode +ACo-inode) +- +AHs- +- journal+AF8-t +ACo-journal +AD0- EXT4+AF8-SB(inode-+AD4-i+AF8-sb)-+AD4-s+AF8-journal+ADs- +- +- if (journal) +- return +ACE-jbd2+AF8-transaction+AF8-committed(journal, +- EXT4+AF8-I(inode)-+AD4-i+AF8-datasync+AF8-tid)+ADs- +- /+ACo- Any metadata buffers to write? +ACo-/ +- if (+ACE-list+AF8-empty(+ACY-inode-+AD4-i+AF8-mapping-+AD4-private+AF8-list)) +- return true+ADs- +- return inode-+AD4-i+AF8-state +ACY- I+AF8-DIRTY+AF8-DATASYNC+ADs- +- +AH0- +- static int ext4+AF8-iomap+AF8-begin(struct inode +ACo-inode, loff+AF8-t offset, loff+AF8-t length, unsigned flags, struct iomap +ACo-iomap) +AHs- diff --cc include/linux/iomap.h index a61be86710b5,73e3b7085dbe..a309d611d380 --- a/include/linux/iomap.h +-+-+- b/include/linux/iomap.h +AEAAQABA- -21,8 -21,12 +-21,13 +AEAAQABA- struct vm+AF8-fault /+ACo- +ACo- Flags for all iomap mappings: +ACo-/ -+ACM-define IOMAP+AF8-F+AF8-NEW 0x01 /+ACo- blocks have been newly allocated +ACo-/ +-+ACM-define IOMAP+AF8-F+AF8-NEW 0x01 /+ACo- blocks have been newly allocated +ACo-/ +-+ACM-define IOMAP+AF8-F+AF8-BOUNDARY 0x02 /+ACo- mapping ends at metadata boundary +ACo-/ +- /+ACo- +- +ACo- IOMAP+AF8-F+AF8-DIRTY indicates the inode has uncommitted metadata needed to access +- +ACo- written data and requires fdatasync to commit them to persistent storage. +- +ACo-/ -+ACM-define IOMAP+AF8-F+AF8-DIRTY 0x02 +-+-+ACM-define IOMAP+AF8-F+AF8-DIRTY 0x04 /+ACo- +ACo- Flags that only need to be reported for IOMAP+AF8-REPORT requests: