Loading fs/statfs.c +8 −1 Original line number Original line Diff line number Diff line Loading @@ -77,10 +77,17 @@ EXPORT_SYMBOL(vfs_statfs); int user_statfs(const char __user *pathname, struct kstatfs *st) int user_statfs(const char __user *pathname, struct kstatfs *st) { { struct path path; struct path path; int error = user_path_at(AT_FDCWD, pathname, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &path); int error; unsigned int lookup_flags = LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT; retry: error = user_path_at(AT_FDCWD, pathname, lookup_flags, &path); if (!error) { if (!error) { error = vfs_statfs(&path, st); error = vfs_statfs(&path, st); path_put(&path); path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; goto retry; } } } return error; return error; } } Loading Loading
fs/statfs.c +8 −1 Original line number Original line Diff line number Diff line Loading @@ -77,10 +77,17 @@ EXPORT_SYMBOL(vfs_statfs); int user_statfs(const char __user *pathname, struct kstatfs *st) int user_statfs(const char __user *pathname, struct kstatfs *st) { { struct path path; struct path path; int error = user_path_at(AT_FDCWD, pathname, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &path); int error; unsigned int lookup_flags = LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT; retry: error = user_path_at(AT_FDCWD, pathname, lookup_flags, &path); if (!error) { if (!error) { error = vfs_statfs(&path, st); error = vfs_statfs(&path, st); path_put(&path); path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; goto retry; } } } return error; return error; } } Loading