All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1462988808.29294.26.camel@intel.com>

diff --git a/a/1.txt b/N1/1.txt
index d53639e..07e8ff2 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,34 +1,49 @@
-T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g
-VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g
-dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt
-cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv
-ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0
-aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g
-YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs
-IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li
-aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt
-cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu
-endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo
-YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+
-ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth
-cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj
-aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt
-YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl
-X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0
-IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg
-dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y
-X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo
-IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP
-bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y
-YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g
-U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl
-dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj
-aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg
-YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u
-DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0
-dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr
-IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl
-dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ
-R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj
-ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm
-aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:
+> On Tue 10-05-16 12:49:15, Vishal Verma wrote:
+> > 
+> > In the truncate or hole-punch path in dax, we clear out sub-page
+> > ranges.
+> > If these sub-page ranges are sector aligned and sized, we can do the
+> > zeroing through the driver instead so that error-clearing is handled
+> > automatically.
+> > 
+> > For sub-sector ranges, we still have to rely on clear_pmem and have
+> > the
+> > possibility of tripping over errors.
+> > 
+> > Cc: Dan Williams <dan.j.williams@intel.com>
+> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
+> > Cc: Jeff Moyer <jmoyer@redhat.com>
+> > Cc: Christoph Hellwig <hch@infradead.org>
+> > Cc: Dave Chinner <david@fromorbit.com>
+> > Cc: Jan Kara <jack@suse.cz>
+> > Reviewed-by: Christoph Hellwig <hch@lst.de>
+> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
+> ...
+> 
+> > 
+> > +static bool dax_range_is_aligned(struct block_device *bdev,
+> > +				 struct blk_dax_ctl *dax, unsigned
+> > int offset,
+> > +				 unsigned int length)
+> > +{
+> > +	unsigned short sector_size = bdev_logical_block_size(bdev);
+> > +
+> > +	if (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))
+> One more question: 'dax' is initialized in dax_zero_page_range() and
+> dax->addr is going to be always NULL here. So either you forgot to
+> call
+> dax_map_atomic() to get the addr or the use of dax->addr is just bogus
+> (which is what I currently believe since I see no way how the address
+> could
+> be unaligned with the sector_size)...
+> 
+
+Good catch, and you're right. I don't think I actually even want to use
+dax->addr for the alignment check here - I want to check if we're
+aligned to the block device sector. I'm thinking something like:
+
+	if (!IS_ALIGNED(offset, sector_size))
+
+Technically we want to check if sector * sector_size + offset is
+aligned, but the first part of that is already a sector :)
diff --git a/a/content_digest b/N1/content_digest
index a2ebf82..a81d945 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -23,39 +23,54 @@
  " david@fromorbit.com <david@fromorbit.com>\0"
  "\00:1\0"
  "b\0"
- "T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g\n"
- "VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g\n"
- "dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt\n"
- "cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv\n"
- "ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0\n"
- "aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g\n"
- "YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs\n"
- "IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li\n"
- "aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt\n"
- "cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu\n"
- "endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo\n"
- "YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+\n"
- "ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth\n"
- "cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj\n"
- "aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt\n"
- "YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl\n"
- "X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0\n"
- "IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg\n"
- "dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y\n"
- "X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo\n"
- "IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP\n"
- "bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y\n"
- "YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g\n"
- "U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl\n"
- "dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj\n"
- "aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg\n"
- "YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u\n"
- "DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0\n"
- "dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr\n"
- "IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl\n"
- "dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ\n"
- "R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj\n"
- "ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm\n"
- aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+ "On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:\n"
+ "> On Tue 10-05-16 12:49:15, Vishal Verma wrote:\n"
+ "> > \n"
+ "> > In the truncate or hole-punch path in dax, we clear out sub-page\n"
+ "> > ranges.\n"
+ "> > If these sub-page ranges are sector aligned and sized, we can do the\n"
+ "> > zeroing through the driver instead so that error-clearing is handled\n"
+ "> > automatically.\n"
+ "> > \n"
+ "> > For sub-sector ranges, we still have to rely on clear_pmem and have\n"
+ "> > the\n"
+ "> > possibility of tripping over errors.\n"
+ "> > \n"
+ "> > Cc: Dan Williams <dan.j.williams@intel.com>\n"
+ "> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>\n"
+ "> > Cc: Jeff Moyer <jmoyer@redhat.com>\n"
+ "> > Cc: Christoph Hellwig <hch@infradead.org>\n"
+ "> > Cc: Dave Chinner <david@fromorbit.com>\n"
+ "> > Cc: Jan Kara <jack@suse.cz>\n"
+ "> > Reviewed-by: Christoph Hellwig <hch@lst.de>\n"
+ "> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>\n"
+ "> ...\n"
+ "> \n"
+ "> > \n"
+ "> > +static bool dax_range_is_aligned(struct block_device *bdev,\n"
+ "> > +\t\t\t\t\302\240struct blk_dax_ctl *dax, unsigned\n"
+ "> > int offset,\n"
+ "> > +\t\t\t\t\302\240unsigned int length)\n"
+ "> > +{\n"
+ "> > +\tunsigned short sector_size = bdev_logical_block_size(bdev);\n"
+ "> > +\n"
+ "> > +\tif (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))\n"
+ "> One more question: 'dax' is initialized in dax_zero_page_range() and\n"
+ "> dax->addr is going to be always NULL here. So either you forgot to\n"
+ "> call\n"
+ "> dax_map_atomic() to get the addr or the use of dax->addr is just bogus\n"
+ "> (which is what I currently believe since I see no way how the address\n"
+ "> could\n"
+ "> be unaligned with the sector_size)...\n"
+ "> \n"
+ "\n"
+ "Good catch, and you're right. I don't think I actually even want to use\n"
+ "dax->addr for the alignment check here - I want to check if we're\n"
+ "aligned to the block device sector. I'm thinking something like:\n"
+ "\n"
+ "\tif (!IS_ALIGNED(offset, sector_size))\n"
+ "\n"
+ "Technically we want to check if sector * sector_size + offset is\n"
+ aligned, but the first part of that is already a sector :)
 
-17e1ca6ec3a1eb38acd366956b8704e6238221ad3c039454d2406658bc327ac2
+d381d0e978c3ce53368f800736a9595dbf86f1bc9a7ebffe08f2650af183c6d6

diff --git a/a/1.txt b/N2/1.txt
index d53639e..f93c32e 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,34 +1,53 @@
-T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g
-VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g
-dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt
-cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv
-ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0
-aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g
-YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs
-IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li
-aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt
-cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu
-endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo
-YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+
-ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth
-cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj
-aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt
-YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl
-X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0
-IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg
-dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y
-X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo
-IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP
-bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y
-YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g
-U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl
-dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj
-aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg
-YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u
-DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0
-dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr
-IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl
-dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ
-R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj
-ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm
-aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:
+> On Tue 10-05-16 12:49:15, Vishal Verma wrote:
+> > 
+> > In the truncate or hole-punch path in dax, we clear out sub-page
+> > ranges.
+> > If these sub-page ranges are sector aligned and sized, we can do the
+> > zeroing through the driver instead so that error-clearing is handled
+> > automatically.
+> > 
+> > For sub-sector ranges, we still have to rely on clear_pmem and have
+> > the
+> > possibility of tripping over errors.
+> > 
+> > Cc: Dan Williams <dan.j.williams@intel.com>
+> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
+> > Cc: Jeff Moyer <jmoyer@redhat.com>
+> > Cc: Christoph Hellwig <hch@infradead.org>
+> > Cc: Dave Chinner <david@fromorbit.com>
+> > Cc: Jan Kara <jack@suse.cz>
+> > Reviewed-by: Christoph Hellwig <hch@lst.de>
+> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
+> ...
+> 
+> > 
+> > +static bool dax_range_is_aligned(struct block_device *bdev,
+> > +				 struct blk_dax_ctl *dax, unsigned
+> > int offset,
+> > +				 unsigned int length)
+> > +{
+> > +	unsigned short sector_size = bdev_logical_block_size(bdev);
+> > +
+> > +	if (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))
+> One more question: 'dax' is initialized in dax_zero_page_range() and
+> dax->addr is going to be always NULL here. So either you forgot to
+> call
+> dax_map_atomic() to get the addr or the use of dax->addr is just bogus
+> (which is what I currently believe since I see no way how the address
+> could
+> be unaligned with the sector_size)...
+> 
+
+Good catch, and you're right. I don't think I actually even want to use
+dax->addr for the alignment check here - I want to check if we're
+aligned to the block device sector. I'm thinking something like:
+
+	if (!IS_ALIGNED(offset, sector_size))
+
+Technically we want to check if sector * sector_size + offset is
+aligned, but the first part of that is already a sector :)
+_______________________________________________
+Linux-nvdimm mailing list
+Linux-nvdimm@lists.01.org
+https://lists.01.org/mailman/listinfo/linux-nvdimm
diff --git a/a/content_digest b/N2/content_digest
index a2ebf82..aabcf5d 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -5,57 +5,71 @@
  "Subject\0Re: [PATCH v6 4/5] dax: for truncate/hole-punch, do zeroing through the driver if possible\0"
  "Date\0Wed, 11 May 2016 17:47:00 +0000\0"
  "To\0jack@suse.cz <jack@suse.cz>\0"
- "Cc\0linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>"
-  linux-block@vger.kernel.org <linux-block@vger.kernel.org>
-  hch@infradead.org <hch@infradead.org>
+ "Cc\0hch@infradead.org <hch@infradead.org>"
+  linux-nvdimm@lists.01.org <linux-nvdimm@lists.01.org>
+  axboe@fb.com <axboe@fb.com>
+  david@fromorbit.com <david@fromorbit.com>
+  linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
   xfs@oss.sgi.com <xfs@oss.sgi.com>
-  jmoyer@redhat.com <jmoyer@redhat.com>
+  linux-block@vger.kernel.org <linux-block@vger.kernel.org>
   linux-mm@kvack.org <linux-mm@kvack.org>
-  Williams
-  Dan J <dan.j.williams@intel.com>
-  axboe@fb.com <axboe@fb.com>
-  akpm@linux-foundation.org <akpm@linux-foundation.org>
-  linux-nvdimm@lists.01.org <linux-nvdimm@lists.01.org>
   linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>
-  ross.zwisler@linux.intel.com <ross.zwisler@linux.intel.com>
   linux-ext4@vger.kernel.org <linux-ext4@vger.kernel.org>
-  boaz@plexistor.com <boaz@plexistor.com>
- " david@fromorbit.com <david@fromorbit.com>\0"
+ " akpm@linux-foundation.org <akpm@linux-foundation.org>\0"
  "\00:1\0"
  "b\0"
- "T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g\n"
- "VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g\n"
- "dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt\n"
- "cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv\n"
- "ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0\n"
- "aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g\n"
- "YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs\n"
- "IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li\n"
- "aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt\n"
- "cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu\n"
- "endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo\n"
- "YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+\n"
- "ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth\n"
- "cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj\n"
- "aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt\n"
- "YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl\n"
- "X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0\n"
- "IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg\n"
- "dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y\n"
- "X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo\n"
- "IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP\n"
- "bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y\n"
- "YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g\n"
- "U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl\n"
- "dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj\n"
- "aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg\n"
- "YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u\n"
- "DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0\n"
- "dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr\n"
- "IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl\n"
- "dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ\n"
- "R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj\n"
- "ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm\n"
- aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+ "On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:\n"
+ "> On Tue 10-05-16 12:49:15, Vishal Verma wrote:\n"
+ "> > \n"
+ "> > In the truncate or hole-punch path in dax, we clear out sub-page\n"
+ "> > ranges.\n"
+ "> > If these sub-page ranges are sector aligned and sized, we can do the\n"
+ "> > zeroing through the driver instead so that error-clearing is handled\n"
+ "> > automatically.\n"
+ "> > \n"
+ "> > For sub-sector ranges, we still have to rely on clear_pmem and have\n"
+ "> > the\n"
+ "> > possibility of tripping over errors.\n"
+ "> > \n"
+ "> > Cc: Dan Williams <dan.j.williams@intel.com>\n"
+ "> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>\n"
+ "> > Cc: Jeff Moyer <jmoyer@redhat.com>\n"
+ "> > Cc: Christoph Hellwig <hch@infradead.org>\n"
+ "> > Cc: Dave Chinner <david@fromorbit.com>\n"
+ "> > Cc: Jan Kara <jack@suse.cz>\n"
+ "> > Reviewed-by: Christoph Hellwig <hch@lst.de>\n"
+ "> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>\n"
+ "> ...\n"
+ "> \n"
+ "> > \n"
+ "> > +static bool dax_range_is_aligned(struct block_device *bdev,\n"
+ "> > +\t\t\t\t\302\240struct blk_dax_ctl *dax, unsigned\n"
+ "> > int offset,\n"
+ "> > +\t\t\t\t\302\240unsigned int length)\n"
+ "> > +{\n"
+ "> > +\tunsigned short sector_size = bdev_logical_block_size(bdev);\n"
+ "> > +\n"
+ "> > +\tif (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))\n"
+ "> One more question: 'dax' is initialized in dax_zero_page_range() and\n"
+ "> dax->addr is going to be always NULL here. So either you forgot to\n"
+ "> call\n"
+ "> dax_map_atomic() to get the addr or the use of dax->addr is just bogus\n"
+ "> (which is what I currently believe since I see no way how the address\n"
+ "> could\n"
+ "> be unaligned with the sector_size)...\n"
+ "> \n"
+ "\n"
+ "Good catch, and you're right. I don't think I actually even want to use\n"
+ "dax->addr for the alignment check here - I want to check if we're\n"
+ "aligned to the block device sector. I'm thinking something like:\n"
+ "\n"
+ "\tif (!IS_ALIGNED(offset, sector_size))\n"
+ "\n"
+ "Technically we want to check if sector * sector_size + offset is\n"
+ "aligned, but the first part of that is already a sector :)\n"
+ "_______________________________________________\n"
+ "Linux-nvdimm mailing list\n"
+ "Linux-nvdimm@lists.01.org\n"
+ https://lists.01.org/mailman/listinfo/linux-nvdimm
 
-17e1ca6ec3a1eb38acd366956b8704e6238221ad3c039454d2406658bc327ac2
+c81299e0e0e07d24ac20c4a5d66c4bdf39012eff3bcba013aa02cae2db52888c

diff --git a/a/1.txt b/N3/1.txt
index d53639e..5a22524 100644
--- a/a/1.txt
+++ b/N3/1.txt
@@ -1,34 +1,53 @@
-T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g
-VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g
-dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt
-cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv
-ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0
-aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g
-YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs
-IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li
-aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt
-cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu
-endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo
-YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+
-ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth
-cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj
-aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt
-YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl
-X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0
-IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg
-dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y
-X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo
-IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP
-bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y
-YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g
-U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl
-dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj
-aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg
-YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u
-DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0
-dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr
-IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl
-dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ
-R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj
-ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm
-aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:
+> On Tue 10-05-16 12:49:15, Vishal Verma wrote:
+> > 
+> > In the truncate or hole-punch path in dax, we clear out sub-page
+> > ranges.
+> > If these sub-page ranges are sector aligned and sized, we can do the
+> > zeroing through the driver instead so that error-clearing is handled
+> > automatically.
+> > 
+> > For sub-sector ranges, we still have to rely on clear_pmem and have
+> > the
+> > possibility of tripping over errors.
+> > 
+> > Cc: Dan Williams <dan.j.williams@intel.com>
+> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
+> > Cc: Jeff Moyer <jmoyer@redhat.com>
+> > Cc: Christoph Hellwig <hch@infradead.org>
+> > Cc: Dave Chinner <david@fromorbit.com>
+> > Cc: Jan Kara <jack@suse.cz>
+> > Reviewed-by: Christoph Hellwig <hch@lst.de>
+> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
+> ...
+> 
+> > 
+> > +static bool dax_range_is_aligned(struct block_device *bdev,
+> > +				 struct blk_dax_ctl *dax, unsigned
+> > int offset,
+> > +				 unsigned int length)
+> > +{
+> > +	unsigned short sector_size = bdev_logical_block_size(bdev);
+> > +
+> > +	if (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))
+> One more question: 'dax' is initialized in dax_zero_page_range() and
+> dax->addr is going to be always NULL here. So either you forgot to
+> call
+> dax_map_atomic() to get the addr or the use of dax->addr is just bogus
+> (which is what I currently believe since I see no way how the address
+> could
+> be unaligned with the sector_size)...
+> 
+
+Good catch, and you're right. I don't think I actually even want to use
+dax->addr for the alignment check here - I want to check if we're
+aligned to the block device sector. I'm thinking something like:
+
+	if (!IS_ALIGNED(offset, sector_size))
+
+Technically we want to check if sector * sector_size + offset is
+aligned, but the first part of that is already a sector :)
+_______________________________________________
+xfs mailing list
+xfs@oss.sgi.com
+http://oss.sgi.com/mailman/listinfo/xfs
diff --git a/a/content_digest b/N3/content_digest
index a2ebf82..7377654 100644
--- a/a/content_digest
+++ b/N3/content_digest
@@ -5,57 +5,75 @@
  "Subject\0Re: [PATCH v6 4/5] dax: for truncate/hole-punch, do zeroing through the driver if possible\0"
  "Date\0Wed, 11 May 2016 17:47:00 +0000\0"
  "To\0jack@suse.cz <jack@suse.cz>\0"
- "Cc\0linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>"
-  linux-block@vger.kernel.org <linux-block@vger.kernel.org>
-  hch@infradead.org <hch@infradead.org>
+ "Cc\0hch@infradead.org <hch@infradead.org>"
+  linux-nvdimm@lists.01.org <linux-nvdimm@lists.01.org>
+  axboe@fb.com <axboe@fb.com>
+  linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
   xfs@oss.sgi.com <xfs@oss.sgi.com>
-  jmoyer@redhat.com <jmoyer@redhat.com>
+  linux-block@vger.kernel.org <linux-block@vger.kernel.org>
   linux-mm@kvack.org <linux-mm@kvack.org>
+  jmoyer@redhat.com <jmoyer@redhat.com>
+  boaz@plexistor.com <boaz@plexistor.com>
+  ross.zwisler@linux.intel.com <ross.zwisler@linux.intel.com>
+  linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>
   Williams
   Dan J <dan.j.williams@intel.com>
-  axboe@fb.com <axboe@fb.com>
-  akpm@linux-foundation.org <akpm@linux-foundation.org>
-  linux-nvdimm@lists.01.org <linux-nvdimm@lists.01.org>
-  linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>
-  ross.zwisler@linux.intel.com <ross.zwisler@linux.intel.com>
   linux-ext4@vger.kernel.org <linux-ext4@vger.kernel.org>
-  boaz@plexistor.com <boaz@plexistor.com>
- " david@fromorbit.com <david@fromorbit.com>\0"
+ " akpm@linux-foundation.org <akpm@linux-foundation.org>\0"
  "\00:1\0"
  "b\0"
- "T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g\n"
- "VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g\n"
- "dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt\n"
- "cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv\n"
- "ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0\n"
- "aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g\n"
- "YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs\n"
- "IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li\n"
- "aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt\n"
- "cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu\n"
- "endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo\n"
- "YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+\n"
- "ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth\n"
- "cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj\n"
- "aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt\n"
- "YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl\n"
- "X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0\n"
- "IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg\n"
- "dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y\n"
- "X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo\n"
- "IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP\n"
- "bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y\n"
- "YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g\n"
- "U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl\n"
- "dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj\n"
- "aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg\n"
- "YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u\n"
- "DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0\n"
- "dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr\n"
- "IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl\n"
- "dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ\n"
- "R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj\n"
- "ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm\n"
- aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+ "On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:\n"
+ "> On Tue 10-05-16 12:49:15, Vishal Verma wrote:\n"
+ "> > \n"
+ "> > In the truncate or hole-punch path in dax, we clear out sub-page\n"
+ "> > ranges.\n"
+ "> > If these sub-page ranges are sector aligned and sized, we can do the\n"
+ "> > zeroing through the driver instead so that error-clearing is handled\n"
+ "> > automatically.\n"
+ "> > \n"
+ "> > For sub-sector ranges, we still have to rely on clear_pmem and have\n"
+ "> > the\n"
+ "> > possibility of tripping over errors.\n"
+ "> > \n"
+ "> > Cc: Dan Williams <dan.j.williams@intel.com>\n"
+ "> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>\n"
+ "> > Cc: Jeff Moyer <jmoyer@redhat.com>\n"
+ "> > Cc: Christoph Hellwig <hch@infradead.org>\n"
+ "> > Cc: Dave Chinner <david@fromorbit.com>\n"
+ "> > Cc: Jan Kara <jack@suse.cz>\n"
+ "> > Reviewed-by: Christoph Hellwig <hch@lst.de>\n"
+ "> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>\n"
+ "> ...\n"
+ "> \n"
+ "> > \n"
+ "> > +static bool dax_range_is_aligned(struct block_device *bdev,\n"
+ "> > +\t\t\t\t\302\240struct blk_dax_ctl *dax, unsigned\n"
+ "> > int offset,\n"
+ "> > +\t\t\t\t\302\240unsigned int length)\n"
+ "> > +{\n"
+ "> > +\tunsigned short sector_size = bdev_logical_block_size(bdev);\n"
+ "> > +\n"
+ "> > +\tif (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))\n"
+ "> One more question: 'dax' is initialized in dax_zero_page_range() and\n"
+ "> dax->addr is going to be always NULL here. So either you forgot to\n"
+ "> call\n"
+ "> dax_map_atomic() to get the addr or the use of dax->addr is just bogus\n"
+ "> (which is what I currently believe since I see no way how the address\n"
+ "> could\n"
+ "> be unaligned with the sector_size)...\n"
+ "> \n"
+ "\n"
+ "Good catch, and you're right. I don't think I actually even want to use\n"
+ "dax->addr for the alignment check here - I want to check if we're\n"
+ "aligned to the block device sector. I'm thinking something like:\n"
+ "\n"
+ "\tif (!IS_ALIGNED(offset, sector_size))\n"
+ "\n"
+ "Technically we want to check if sector * sector_size + offset is\n"
+ "aligned, but the first part of that is already a sector :)\n"
+ "_______________________________________________\n"
+ "xfs mailing list\n"
+ "xfs@oss.sgi.com\n"
+ http://oss.sgi.com/mailman/listinfo/xfs
 
-17e1ca6ec3a1eb38acd366956b8704e6238221ad3c039454d2406658bc327ac2
+1c19c175d07a6efe72b1aec40302ed5a7ad6329d0bb6f6f358a1d039d743853f

diff --git a/a/1.txt b/N4/1.txt
index d53639e..07e8ff2 100644
--- a/a/1.txt
+++ b/N4/1.txt
@@ -1,34 +1,49 @@
-T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g
-VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g
-dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt
-cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv
-ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0
-aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g
-YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs
-IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li
-aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt
-cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu
-endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo
-YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+
-ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth
-cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj
-aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt
-YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl
-X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0
-IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg
-dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y
-X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo
-IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP
-bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y
-YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g
-U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl
-dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj
-aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg
-YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u
-DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0
-dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr
-IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl
-dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ
-R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj
-ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm
-aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:
+> On Tue 10-05-16 12:49:15, Vishal Verma wrote:
+> > 
+> > In the truncate or hole-punch path in dax, we clear out sub-page
+> > ranges.
+> > If these sub-page ranges are sector aligned and sized, we can do the
+> > zeroing through the driver instead so that error-clearing is handled
+> > automatically.
+> > 
+> > For sub-sector ranges, we still have to rely on clear_pmem and have
+> > the
+> > possibility of tripping over errors.
+> > 
+> > Cc: Dan Williams <dan.j.williams@intel.com>
+> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
+> > Cc: Jeff Moyer <jmoyer@redhat.com>
+> > Cc: Christoph Hellwig <hch@infradead.org>
+> > Cc: Dave Chinner <david@fromorbit.com>
+> > Cc: Jan Kara <jack@suse.cz>
+> > Reviewed-by: Christoph Hellwig <hch@lst.de>
+> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
+> ...
+> 
+> > 
+> > +static bool dax_range_is_aligned(struct block_device *bdev,
+> > +				 struct blk_dax_ctl *dax, unsigned
+> > int offset,
+> > +				 unsigned int length)
+> > +{
+> > +	unsigned short sector_size = bdev_logical_block_size(bdev);
+> > +
+> > +	if (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))
+> One more question: 'dax' is initialized in dax_zero_page_range() and
+> dax->addr is going to be always NULL here. So either you forgot to
+> call
+> dax_map_atomic() to get the addr or the use of dax->addr is just bogus
+> (which is what I currently believe since I see no way how the address
+> could
+> be unaligned with the sector_size)...
+> 
+
+Good catch, and you're right. I don't think I actually even want to use
+dax->addr for the alignment check here - I want to check if we're
+aligned to the block device sector. I'm thinking something like:
+
+	if (!IS_ALIGNED(offset, sector_size))
+
+Technically we want to check if sector * sector_size + offset is
+aligned, but the first part of that is already a sector :)
diff --git a/a/content_digest b/N4/content_digest
index a2ebf82..bf7e19b 100644
--- a/a/content_digest
+++ b/N4/content_digest
@@ -15,7 +15,7 @@
   Dan J <dan.j.williams@intel.com>
   axboe@fb.com <axboe@fb.com>
   akpm@linux-foundation.org <akpm@linux-foundation.org>
-  linux-nvdimm@lists.01.org <linux-nvdimm@lists.01.org>
+  linux-nvdimm@lists.01.org <linux-nvdimm@ml01.01.org>
   linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>
   ross.zwisler@linux.intel.com <ross.zwisler@linux.intel.com>
   linux-ext4@vger.kernel.org <linux-ext4@vger.kernel.org>
@@ -23,39 +23,54 @@
  " david@fromorbit.com <david@fromorbit.com>\0"
  "\00:1\0"
  "b\0"
- "T24gV2VkLCAyMDE2LTA1LTExIGF0IDEwOjE1ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gT24g\n"
- "VHVlIDEwLTA1LTE2IDEyOjQ5OjE1LCBWaXNoYWwgVmVybWEgd3JvdGU6DQo+ID4gDQo+ID4gSW4g\n"
- "dGhlIHRydW5jYXRlIG9yIGhvbGUtcHVuY2ggcGF0aCBpbiBkYXgsIHdlIGNsZWFyIG91dCBzdWIt\n"
- "cGFnZQ0KPiA+IHJhbmdlcy4NCj4gPiBJZiB0aGVzZSBzdWItcGFnZSByYW5nZXMgYXJlIHNlY3Rv\n"
- "ciBhbGlnbmVkIGFuZCBzaXplZCwgd2UgY2FuIGRvIHRoZQ0KPiA+IHplcm9pbmcgdGhyb3VnaCB0\n"
- "aGUgZHJpdmVyIGluc3RlYWQgc28gdGhhdCBlcnJvci1jbGVhcmluZyBpcyBoYW5kbGVkDQo+ID4g\n"
- "YXV0b21hdGljYWxseS4NCj4gPiANCj4gPiBGb3Igc3ViLXNlY3RvciByYW5nZXMsIHdlIHN0aWxs\n"
- "IGhhdmUgdG8gcmVseSBvbiBjbGVhcl9wbWVtIGFuZCBoYXZlDQo+ID4gdGhlDQo+ID4gcG9zc2li\n"
- "aWxpdHkgb2YgdHJpcHBpbmcgb3ZlciBlcnJvcnMuDQo+ID4gDQo+ID4gQ2M6IERhbiBXaWxsaWFt\n"
- "cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KPiA+IENjOiBSb3NzIFp3aXNsZXIgPHJvc3Mu\n"
- "endpc2xlckBsaW51eC5pbnRlbC5jb20+DQo+ID4gQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRo\n"
- "YXQuY29tPg0KPiA+IENjOiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+DQo+\n"
- "ID4gQ2M6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4NCj4gPiBDYzogSmFuIEth\n"
- "cmEgPGphY2tAc3VzZS5jej4NCj4gPiBSZXZpZXdlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhj\n"
- "aEBsc3QuZGU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJt\n"
- "YUBpbnRlbC5jb20+DQo+IC4uLg0KPiANCj4gPiANCj4gPiArc3RhdGljIGJvb2wgZGF4X3Jhbmdl\n"
- "X2lzX2FsaWduZWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwNCj4gPiArCQkJCcKgc3RydWN0\n"
- "IGJsa19kYXhfY3RsICpkYXgsIHVuc2lnbmVkDQo+ID4gaW50IG9mZnNldCwNCj4gPiArCQkJCcKg\n"
- "dW5zaWduZWQgaW50IGxlbmd0aCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgc2hvcnQgc2VjdG9y\n"
- "X3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo\n"
- "IUlTX0FMSUdORUQoKCh1NjQpZGF4LT5hZGRyICsgb2Zmc2V0KSwgc2VjdG9yX3NpemUpKQ0KPiBP\n"
- "bmUgbW9yZSBxdWVzdGlvbjogJ2RheCcgaXMgaW5pdGlhbGl6ZWQgaW4gZGF4X3plcm9fcGFnZV9y\n"
- "YW5nZSgpIGFuZA0KPiBkYXgtPmFkZHIgaXMgZ29pbmcgdG8gYmUgYWx3YXlzIE5VTEwgaGVyZS4g\n"
- "U28gZWl0aGVyIHlvdSBmb3Jnb3QgdG8NCj4gY2FsbA0KPiBkYXhfbWFwX2F0b21pYygpIHRvIGdl\n"
- "dCB0aGUgYWRkciBvciB0aGUgdXNlIG9mIGRheC0+YWRkciBpcyBqdXN0IGJvZ3VzDQo+ICh3aGlj\n"
- "aCBpcyB3aGF0IEkgY3VycmVudGx5IGJlbGlldmUgc2luY2UgSSBzZWUgbm8gd2F5IGhvdyB0aGUg\n"
- "YWRkcmVzcw0KPiBjb3VsZA0KPiBiZSB1bmFsaWduZWQgd2l0aCB0aGUgc2VjdG9yX3NpemUpLi4u\n"
- "DQo+IA0KDQpHb29kIGNhdGNoLCBhbmQgeW91J3JlIHJpZ2h0LiBJIGRvbid0IHRoaW5rIEkgYWN0\n"
- "dWFsbHkgZXZlbiB3YW50IHRvIHVzZQ0KZGF4LT5hZGRyIGZvciB0aGUgYWxpZ25tZW50IGNoZWNr\n"
- "IGhlcmUgLSBJIHdhbnQgdG8gY2hlY2sgaWYgd2UncmUNCmFsaWduZWQgdG8gdGhlIGJsb2NrIGRl\n"
- "dmljZSBzZWN0b3IuIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZToNCg0KCWlmICghSVNfQUxJ\n"
- "R05FRChvZmZzZXQsIHNlY3Rvcl9zaXplKSkNCg0KVGVjaG5pY2FsbHkgd2Ugd2FudCB0byBjaGVj\n"
- "ayBpZiBzZWN0b3IgKiBzZWN0b3Jfc2l6ZSArIG9mZnNldCBpcw0KYWxpZ25lZCwgYnV0IHRoZSBm\n"
- aXJzdCBwYXJ0IG9mIHRoYXQgaXMgYWxyZWFkeSBhIHNlY3RvciA6KQ==
+ "On Wed, 2016-05-11 at 10:15 +0200, Jan Kara wrote:\n"
+ "> On Tue 10-05-16 12:49:15, Vishal Verma wrote:\n"
+ "> > \n"
+ "> > In the truncate or hole-punch path in dax, we clear out sub-page\n"
+ "> > ranges.\n"
+ "> > If these sub-page ranges are sector aligned and sized, we can do the\n"
+ "> > zeroing through the driver instead so that error-clearing is handled\n"
+ "> > automatically.\n"
+ "> > \n"
+ "> > For sub-sector ranges, we still have to rely on clear_pmem and have\n"
+ "> > the\n"
+ "> > possibility of tripping over errors.\n"
+ "> > \n"
+ "> > Cc: Dan Williams <dan.j.williams@intel.com>\n"
+ "> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>\n"
+ "> > Cc: Jeff Moyer <jmoyer@redhat.com>\n"
+ "> > Cc: Christoph Hellwig <hch@infradead.org>\n"
+ "> > Cc: Dave Chinner <david@fromorbit.com>\n"
+ "> > Cc: Jan Kara <jack@suse.cz>\n"
+ "> > Reviewed-by: Christoph Hellwig <hch@lst.de>\n"
+ "> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>\n"
+ "> ...\n"
+ "> \n"
+ "> > \n"
+ "> > +static bool dax_range_is_aligned(struct block_device *bdev,\n"
+ "> > +\t\t\t\t\302\240struct blk_dax_ctl *dax, unsigned\n"
+ "> > int offset,\n"
+ "> > +\t\t\t\t\302\240unsigned int length)\n"
+ "> > +{\n"
+ "> > +\tunsigned short sector_size = bdev_logical_block_size(bdev);\n"
+ "> > +\n"
+ "> > +\tif (!IS_ALIGNED(((u64)dax->addr + offset), sector_size))\n"
+ "> One more question: 'dax' is initialized in dax_zero_page_range() and\n"
+ "> dax->addr is going to be always NULL here. So either you forgot to\n"
+ "> call\n"
+ "> dax_map_atomic() to get the addr or the use of dax->addr is just bogus\n"
+ "> (which is what I currently believe since I see no way how the address\n"
+ "> could\n"
+ "> be unaligned with the sector_size)...\n"
+ "> \n"
+ "\n"
+ "Good catch, and you're right. I don't think I actually even want to use\n"
+ "dax->addr for the alignment check here - I want to check if we're\n"
+ "aligned to the block device sector. I'm thinking something like:\n"
+ "\n"
+ "\tif (!IS_ALIGNED(offset, sector_size))\n"
+ "\n"
+ "Technically we want to check if sector * sector_size + offset is\n"
+ aligned, but the first part of that is already a sector :)
 
-17e1ca6ec3a1eb38acd366956b8704e6238221ad3c039454d2406658bc327ac2
+58684a96a872197cbf1375334ed5fb0275e024ed50ece43a058a78c7695ef033

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.