@@ -1911,8 +1911,6 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
1911
1911
struct mem_cgroup_event * event ;
1912
1912
struct cgroup_subsys_state * cfile_css ;
1913
1913
unsigned int efd , cfd ;
1914
- struct fd efile ;
1915
- struct fd cfile ;
1916
1914
struct dentry * cdentry ;
1917
1915
const char * name ;
1918
1916
char * endp ;
@@ -1936,6 +1934,12 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
1936
1934
else
1937
1935
return - EINVAL ;
1938
1936
1937
+ CLASS (fd , efile )(efd );
1938
+ if (fd_empty (efile ))
1939
+ return - EBADF ;
1940
+
1941
+ CLASS (fd , cfile )(cfd );
1942
+
1939
1943
event = kzalloc (sizeof (* event ), GFP_KERNEL );
1940
1944
if (!event )
1941
1945
return - ENOMEM ;
@@ -1946,20 +1950,13 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
1946
1950
init_waitqueue_func_entry (& event -> wait , memcg_event_wake );
1947
1951
INIT_WORK (& event -> remove , memcg_event_remove );
1948
1952
1949
- efile = fdget (efd );
1950
- if (!fd_file (efile )) {
1951
- ret = - EBADF ;
1952
- goto out_kfree ;
1953
- }
1954
-
1955
1953
event -> eventfd = eventfd_ctx_fileget (fd_file (efile ));
1956
1954
if (IS_ERR (event -> eventfd )) {
1957
1955
ret = PTR_ERR (event -> eventfd );
1958
- goto out_put_efile ;
1956
+ goto out_kfree ;
1959
1957
}
1960
1958
1961
- cfile = fdget (cfd );
1962
- if (!fd_file (cfile )) {
1959
+ if (fd_empty (cfile )) {
1963
1960
ret = - EBADF ;
1964
1961
goto out_put_eventfd ;
1965
1962
}
@@ -1968,7 +1965,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
1968
1965
/* AV: shouldn't we check that it's been opened for read instead? */
1969
1966
ret = file_permission (fd_file (cfile ), MAY_READ );
1970
1967
if (ret < 0 )
1971
- goto out_put_cfile ;
1968
+ goto out_put_eventfd ;
1972
1969
1973
1970
/*
1974
1971
* The control file must be a regular cgroup1 file. As a regular cgroup
@@ -1977,7 +1974,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
1977
1974
cdentry = fd_file (cfile )-> f_path .dentry ;
1978
1975
if (cdentry -> d_sb -> s_type != & cgroup_fs_type || !d_is_reg (cdentry )) {
1979
1976
ret = - EINVAL ;
1980
- goto out_put_cfile ;
1977
+ goto out_put_eventfd ;
1981
1978
}
1982
1979
1983
1980
/*
@@ -2010,7 +2007,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
2010
2007
event -> unregister_event = memsw_cgroup_usage_unregister_event ;
2011
2008
} else {
2012
2009
ret = - EINVAL ;
2013
- goto out_put_cfile ;
2010
+ goto out_put_eventfd ;
2014
2011
}
2015
2012
2016
2013
/*
@@ -2022,11 +2019,9 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
2022
2019
& memory_cgrp_subsys );
2023
2020
ret = - EINVAL ;
2024
2021
if (IS_ERR (cfile_css ))
2025
- goto out_put_cfile ;
2026
- if (cfile_css != css ) {
2027
- css_put (cfile_css );
2028
- goto out_put_cfile ;
2029
- }
2022
+ goto out_put_eventfd ;
2023
+ if (cfile_css != css )
2024
+ goto out_put_css ;
2030
2025
2031
2026
ret = event -> register_event (memcg , event -> eventfd , buf );
2032
2027
if (ret )
@@ -2037,23 +2032,14 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
2037
2032
spin_lock_irq (& memcg -> event_list_lock );
2038
2033
list_add (& event -> list , & memcg -> event_list );
2039
2034
spin_unlock_irq (& memcg -> event_list_lock );
2040
-
2041
- fdput (cfile );
2042
- fdput (efile );
2043
-
2044
2035
return nbytes ;
2045
2036
2046
2037
out_put_css :
2047
- css_put (css );
2048
- out_put_cfile :
2049
- fdput (cfile );
2038
+ css_put (cfile_css );
2050
2039
out_put_eventfd :
2051
2040
eventfd_ctx_put (event -> eventfd );
2052
- out_put_efile :
2053
- fdput (efile );
2054
2041
out_kfree :
2055
2042
kfree (event );
2056
-
2057
2043
return ret ;
2058
2044
}
2059
2045
0 commit comments