X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=fs%2Fxattr.c;h=3377dff184042044547d42e9b123944a0ad7e96a;hb=9225b23057aeba13957e8033f69a554dc246a80e;hp=49d09e1588093f369d178c78fa53567f91d48a1e;hpb=bd9bbc9842bde1b14046cdbda1153f0d49061135;p=karo-tx-linux.git diff --git a/fs/xattr.c b/fs/xattr.c index 49d09e158809..3377dff18404 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -645,8 +645,9 @@ SYSCALL_DEFINE2(removexattr, const char __user *, pathname, { struct path path; int error; - - error = user_path(pathname, &path); + unsigned int lookup_flags = LOOKUP_FOLLOW; +retry: + error = user_path_at(AT_FDCWD, pathname, lookup_flags, &path); if (error) return error; error = mnt_want_write(path.mnt); @@ -655,6 +656,10 @@ SYSCALL_DEFINE2(removexattr, const char __user *, pathname, mnt_drop_write(path.mnt); } path_put(&path); + if (retry_estale(error, lookup_flags)) { + lookup_flags |= LOOKUP_REVAL; + goto retry; + } return error; } @@ -663,8 +668,9 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname, { struct path path; int error; - - error = user_lpath(pathname, &path); + unsigned int lookup_flags = 0; +retry: + error = user_path_at(AT_FDCWD, pathname, lookup_flags, &path); if (error) return error; error = mnt_want_write(path.mnt); @@ -673,6 +679,10 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname, mnt_drop_write(path.mnt); } path_put(&path); + if (retry_estale(error, lookup_flags)) { + lookup_flags |= LOOKUP_REVAL; + goto retry; + } return error; }