2018-05-29 15:48:37

by Trond Myklebust

[permalink] [raw]
Subject: [PATCH] NFSv4: Fix sillyrename to return the delegation when appropriate

If the file being sillyrenamed is being completely deleted, or
we are using NFSv4.0, then we need to return the delegation before
sending off the sillydelete.

Signed-off-by: Trond Myklebust <[email protected]>
---
fs/nfs/dir.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index b315f53b3aec..ed20ff51f865 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -1399,11 +1399,32 @@ EXPORT_SYMBOL_GPL(nfs_lookup);
#if IS_ENABLED(CONFIG_NFS_V4)
static int nfs4_lookup_revalidate(struct dentry *, unsigned int);

+/*
+ * Called when the dentry loses inode.
+ * We use it to clean up silly-renamed files.
+ */
+static void nfs4_dentry_iput(struct dentry *dentry, struct inode *inode)
+{
+ if (S_ISDIR(inode->i_mode))
+ /* drop any readdir cache as it could easily be old */
+ NFS_I(inode)->cache_validity |= NFS_INO_INVALID_DATA;
+
+ if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
+ if (inode->i_nlink == 1)
+ nfs4_inode_return_delegation(inode);
+ else
+ nfs4_inode_make_writeable(inode);
+ nfs_complete_unlink(dentry, inode);
+ nfs_drop_nlink(inode);
+ }
+ iput(inode);
+}
+
const struct dentry_operations nfs4_dentry_operations = {
.d_revalidate = nfs4_lookup_revalidate,
.d_weak_revalidate = nfs_weak_revalidate,
.d_delete = nfs_dentry_delete,
- .d_iput = nfs_dentry_iput,
+ .d_iput = nfs4_dentry_iput,
.d_automount = nfs_d_automount,
.d_release = nfs_d_release,
};
--
2.17.0



2018-05-29 18:33:54

by Anna Schumaker

[permalink] [raw]
Subject: Re: [PATCH] NFSv4: Fix sillyrename to return the delegation when appropriate

Hi Trond,

On 05/29/2018 11:48 AM, Trond Myklebust wrote:
> If the file being sillyrenamed is being completely deleted, or
> we are using NFSv4.0, then we need to return the delegation before
> sending off the sillydelete.
>
> Signed-off-by: Trond Myklebust <[email protected]>
> ---
> fs/nfs/dir.c | 23 ++++++++++++++++++++++-
> 1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
> index b315f53b3aec..ed20ff51f865 100644
> --- a/fs/nfs/dir.c
> +++ b/fs/nfs/dir.c
> @@ -1399,11 +1399,32 @@ EXPORT_SYMBOL_GPL(nfs_lookup);
> #if IS_ENABLED(CONFIG_NFS_V4)
> static int nfs4_lookup_revalidate(struct dentry *, unsigned int);
>
> +/*
> + * Called when the dentry loses inode.
> + * We use it to clean up silly-renamed files.
> + */
> +static void nfs4_dentry_iput(struct dentry *dentry, struct inode *inode)
> +{
> + if (S_ISDIR(inode->i_mode))
> + /* drop any readdir cache as it could easily be old */
> + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_DATA;
> +
> + if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
> + if (inode->i_nlink == 1)
> + nfs4_inode_return_delegation(inode);
> + else
> + nfs4_inode_make_writeable(inode);

I think these functions need to be exported in delegation.c to avoid undefined symbol warnings from the compiler.

Thanks,
Anna

> + nfs_complete_unlink(dentry, inode);
> + nfs_drop_nlink(inode);
> + }
> + iput(inode);
> +}
> +
> const struct dentry_operations nfs4_dentry_operations = {
> .d_revalidate = nfs4_lookup_revalidate,
> .d_weak_revalidate = nfs_weak_revalidate,
> .d_delete = nfs_dentry_delete,
> - .d_iput = nfs_dentry_iput,
> + .d_iput = nfs4_dentry_iput,
> .d_automount = nfs_d_automount,
> .d_release = nfs_d_release,
> };
>

2018-05-29 19:24:00

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH] NFSv4: Fix sillyrename to return the delegation when appropriate

T24gVHVlLCAyMDE4LTA1LTI5IGF0IDE0OjMzIC0wNDAwLCBBbm5hIFNjaHVtYWtlciB3cm90ZToN
Cj4gSGkgVHJvbmQsDQo+IA0KPiBPbiAwNS8yOS8yMDE4IDExOjQ4IEFNLCBUcm9uZCBNeWtsZWJ1
c3Qgd3JvdGU6DQo+ID4gSWYgdGhlIGZpbGUgYmVpbmcgc2lsbHlyZW5hbWVkIGlzIGJlaW5nIGNv
bXBsZXRlbHkgZGVsZXRlZCwgb3INCj4gPiB3ZSBhcmUgdXNpbmcgTkZTdjQuMCwgdGhlbiB3ZSBu
ZWVkIHRvIHJldHVybiB0aGUgZGVsZWdhdGlvbiBiZWZvcmUNCj4gPiBzZW5kaW5nIG9mZiB0aGUg
c2lsbHlkZWxldGUuDQo+ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogVHJvbmQgTXlrbGVidXN0IDx0
cm9uZC5teWtsZWJ1c3RAaGFtbWVyc3BhY2UuY29tPg0KPiA+IC0tLQ0KPiA+ICBmcy9uZnMvZGly
LmMgfCAyMyArKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgMjIg
aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9mcy9u
ZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMNCj4gPiBpbmRleCBiMzE1ZjUzYjNhZWMuLmVkMjBmZjUx
Zjg2NSAxMDA2NDQNCj4gPiAtLS0gYS9mcy9uZnMvZGlyLmMNCj4gPiArKysgYi9mcy9uZnMvZGly
LmMNCj4gPiBAQCAtMTM5OSwxMSArMTM5OSwzMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZnNfbG9v
a3VwKTsNCj4gPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4gPiAgc3RhdGljIGlu
dCBuZnM0X2xvb2t1cF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTsN
Cj4gPiAgDQo+ID4gKy8qDQo+ID4gKyAqIENhbGxlZCB3aGVuIHRoZSBkZW50cnkgbG9zZXMgaW5v
ZGUuDQo+ID4gKyAqIFdlIHVzZSBpdCB0byBjbGVhbiB1cCBzaWxseS1yZW5hbWVkIGZpbGVzLg0K
PiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgbmZzNF9kZW50cnlfaXB1dChzdHJ1Y3QgZGVudHJ5
ICpkZW50cnksIHN0cnVjdCBpbm9kZQ0KPiA+ICppbm9kZSkNCj4gPiArew0KPiA+ICsJaWYgKFNf
SVNESVIoaW5vZGUtPmlfbW9kZSkpDQo+ID4gKwkJLyogZHJvcCBhbnkgcmVhZGRpciBjYWNoZSBh
cyBpdCBjb3VsZCBlYXNpbHkgYmUNCj4gPiBvbGQgKi8NCj4gPiArCQlORlNfSShpbm9kZSktPmNh
Y2hlX3ZhbGlkaXR5IHw9DQo+ID4gTkZTX0lOT19JTlZBTElEX0RBVEE7DQo+ID4gKw0KPiA+ICsJ
aWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ORlNGU19SRU5BTUVEKSB7DQo+ID4gKwkJaWYg
KGlub2RlLT5pX25saW5rID09IDEpDQo+ID4gKwkJCW5mczRfaW5vZGVfcmV0dXJuX2RlbGVnYXRp
b24oaW5vZGUpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJbmZzNF9pbm9kZV9tYWtlX3dyaXRlYWJs
ZShpbm9kZSk7DQo+IA0KPiBJIHRoaW5rIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4cG9y
dGVkIGluIGRlbGVnYXRpb24uYyB0byBhdm9pZA0KPiB1bmRlZmluZWQgc3ltYm9sIHdhcm5pbmdz
IGZyb20gdGhlIGNvbXBpbGVyLg0KPiANCg0KV2hvb3BzLiBZZXMsIHRoYW5rcyBmb3Igbm90aWNp
bmchDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXIs
IEhhbW1lcnNwYWNlDQp0cm9uZC5teWtsZWJ1c3RAaGFtbWVyc3BhY2UuY29tDQoNCg==

2018-06-01 08:48:08

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] NFSv4: Fix sillyrename to return the delegation when appropriate

Hi Trond,

I love your patch! Yet something to improve:

[auto build test ERROR on nfs/linux-next]
[also build test ERROR on v4.17-rc7 next-20180531]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Trond-Myklebust/NFSv4-Fix-sillyrename-to-return-the-delegation-when-appropriate/20180531-232019
base: git://git.linux-nfs.org/projects/trondmy/linux-nfs.git linux-next
config: arm-arm5 (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm

All errors (new ones prefixed by >>):

fs/nfs/dir.o: In function `nfs4_dentry_iput':
>> dir.c:(.text+0xe04): undefined reference to `nfs4_inode_make_writeable'
>> dir.c:(.text+0xe28): undefined reference to `nfs4_inode_return_delegation'

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (1.17 kB)
.config.gz (27.83 kB)
Download all attachments

2018-06-01 13:00:56

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] NFSv4: Fix sillyrename to return the delegation when appropriate

Hi Trond,

I love your patch! Yet something to improve:

[auto build test ERROR on nfs/linux-next]
[also build test ERROR on v4.17-rc7 next-20180531]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Trond-Myklebust/NFSv4-Fix-sillyrename-to-return-the-delegation-when-appropriate/20180531-232019
base: git://git.linux-nfs.org/projects/trondmy/linux-nfs.git linux-next
config: mips-fuloong2e_defconfig (attached as .config)
compiler: mips64el-linux-gnuabi64-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=mips

All errors (new ones prefixed by >>):

>> ERROR: "nfs4_inode_make_writeable" [fs/nfs/nfs.ko] undefined!
>> ERROR: "nfs4_inode_return_delegation" [fs/nfs/nfs.ko] undefined!

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (1.13 kB)
.config.gz (16.99 kB)
Download all attachments