Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
7ce0171d
Commit
7ce0171d
authored
Dec 11, 2012
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bugfixes' into nfs-for-next
parents
1fa80644
81d9bce5
Changes
27
Show whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
122 additions
and
96 deletions
+122
-96
arch/arm/include/asm/io.h
arch/arm/include/asm/io.h
+2
-2
arch/arm/include/asm/sched_clock.h
arch/arm/include/asm/sched_clock.h
+0
-2
arch/arm/include/asm/vfpmacros.h
arch/arm/include/asm/vfpmacros.h
+6
-6
arch/arm/include/uapi/asm/hwcap.h
arch/arm/include/uapi/asm/hwcap.h
+2
-1
arch/arm/kernel/sched_clock.c
arch/arm/kernel/sched_clock.c
+4
-14
arch/arm/mm/alignment.c
arch/arm/mm/alignment.c
+1
-1
arch/arm/vfp/vfpmodule.c
arch/arm/vfp/vfpmodule.c
+6
-3
drivers/gpu/drm/drm_fops.c
drivers/gpu/drm/drm_fops.c
+30
-14
drivers/gpu/drm/radeon/evergreen.c
drivers/gpu/drm/radeon/evergreen.c
+1
-1
drivers/hwmon/asb100.c
drivers/hwmon/asb100.c
+1
-1
drivers/hwmon/w83627ehf.c
drivers/hwmon/w83627ehf.c
+1
-0
drivers/hwmon/w83627hf.c
drivers/hwmon/w83627hf.c
+1
-1
drivers/hwmon/w83781d.c
drivers/hwmon/w83781d.c
+1
-1
drivers/hwmon/w83791d.c
drivers/hwmon/w83791d.c
+1
-1
drivers/hwmon/w83792d.c
drivers/hwmon/w83792d.c
+1
-1
drivers/hwmon/w83l786ng.c
drivers/hwmon/w83l786ng.c
+1
-1
fs/gfs2/file.c
fs/gfs2/file.c
+5
-9
fs/gfs2/lops.c
fs/gfs2/lops.c
+2
-14
fs/gfs2/quota.c
fs/gfs2/quota.c
+5
-2
fs/gfs2/rgrp.c
fs/gfs2/rgrp.c
+21
-12
fs/gfs2/super.c
fs/gfs2/super.c
+2
-1
fs/gfs2/trans.c
fs/gfs2/trans.c
+8
-0
fs/nfs/nfs4_fs.h
fs/nfs/nfs4_fs.h
+1
-1
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+6
-1
fs/nfs/nfs4xdr.c
fs/nfs/nfs4xdr.c
+5
-3
fs/nfs/write.c
fs/nfs/write.c
+2
-2
net/sunrpc/rpc_pipe.c
net/sunrpc/rpc_pipe.c
+6
-1
No files found.
arch/arm/include/asm/io.h
View file @
7ce0171d
...
@@ -64,7 +64,7 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen);
...
@@ -64,7 +64,7 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen);
static
inline
void
__raw_writew
(
u16
val
,
volatile
void
__iomem
*
addr
)
static
inline
void
__raw_writew
(
u16
val
,
volatile
void
__iomem
*
addr
)
{
{
asm
volatile
(
"strh %1, %0"
asm
volatile
(
"strh %1, %0"
:
"+Q
o
"
(
*
(
volatile
u16
__force
*
)
addr
)
:
"+Q"
(
*
(
volatile
u16
__force
*
)
addr
)
:
"r"
(
val
));
:
"r"
(
val
));
}
}
...
@@ -72,7 +72,7 @@ static inline u16 __raw_readw(const volatile void __iomem *addr)
...
@@ -72,7 +72,7 @@ static inline u16 __raw_readw(const volatile void __iomem *addr)
{
{
u16
val
;
u16
val
;
asm
volatile
(
"ldrh %1, %0"
asm
volatile
(
"ldrh %1, %0"
:
"+Q
o
"
(
*
(
volatile
u16
__force
*
)
addr
),
:
"+Q"
(
*
(
volatile
u16
__force
*
)
addr
),
"=r"
(
val
));
"=r"
(
val
));
return
val
;
return
val
;
}
}
...
...
arch/arm/include/asm/sched_clock.h
View file @
7ce0171d
...
@@ -10,7 +10,5 @@
...
@@ -10,7 +10,5 @@
extern
void
sched_clock_postinit
(
void
);
extern
void
sched_clock_postinit
(
void
);
extern
void
setup_sched_clock
(
u32
(
*
read
)(
void
),
int
bits
,
unsigned
long
rate
);
extern
void
setup_sched_clock
(
u32
(
*
read
)(
void
),
int
bits
,
unsigned
long
rate
);
extern
void
setup_sched_clock_needs_suspend
(
u32
(
*
read
)(
void
),
int
bits
,
unsigned
long
rate
);
#endif
#endif
arch/arm/include/asm/vfpmacros.h
View file @
7ce0171d
...
@@ -27,9 +27,9 @@
...
@@ -27,9 +27,9 @@
#if __LINUX_ARM_ARCH__ <= 6
#if __LINUX_ARM_ARCH__ <= 6
ldr
\
tmp
,
=
elf_hwcap
@
may
not
have
MVFR
regs
ldr
\
tmp
,
=
elf_hwcap
@
may
not
have
MVFR
regs
ldr
\
tmp
,
[
\
tmp
,
#
0
]
ldr
\
tmp
,
[
\
tmp
,
#
0
]
tst
\
tmp
,
#
HWCAP_VFP
v3D16
tst
\
tmp
,
#
HWCAP_VFP
D32
ldc
eq
l
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FLDMIAD
\
base
!
,
{
d16
-
d31
}
ldc
ne
l
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FLDMIAD
\
base
!
,
{
d16
-
d31
}
add
ne
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
add
eq
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
#else
#else
VFPFMRX
\
tmp
,
MVFR0
@
Media
and
VFP
Feature
Register
0
VFPFMRX
\
tmp
,
MVFR0
@
Media
and
VFP
Feature
Register
0
and
\
tmp
,
\
tmp
,
#
MVFR0_A_SIMD_MASK
@
A_SIMD
field
and
\
tmp
,
\
tmp
,
#
MVFR0_A_SIMD_MASK
@
A_SIMD
field
...
@@ -51,9 +51,9 @@
...
@@ -51,9 +51,9 @@
#if __LINUX_ARM_ARCH__ <= 6
#if __LINUX_ARM_ARCH__ <= 6
ldr
\
tmp
,
=
elf_hwcap
@
may
not
have
MVFR
regs
ldr
\
tmp
,
=
elf_hwcap
@
may
not
have
MVFR
regs
ldr
\
tmp
,
[
\
tmp
,
#
0
]
ldr
\
tmp
,
[
\
tmp
,
#
0
]
tst
\
tmp
,
#
HWCAP_VFP
v3D16
tst
\
tmp
,
#
HWCAP_VFP
D32
stc
eq
l
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FSTMIAD
\
base
!
,
{
d16
-
d31
}
stc
ne
l
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FSTMIAD
\
base
!
,
{
d16
-
d31
}
add
ne
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
add
eq
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
#else
#else
VFPFMRX
\
tmp
,
MVFR0
@
Media
and
VFP
Feature
Register
0
VFPFMRX
\
tmp
,
MVFR0
@
Media
and
VFP
Feature
Register
0
and
\
tmp
,
\
tmp
,
#
MVFR0_A_SIMD_MASK
@
A_SIMD
field
and
\
tmp
,
\
tmp
,
#
MVFR0_A_SIMD_MASK
@
A_SIMD
field
...
...
arch/arm/include/uapi/asm/hwcap.h
View file @
7ce0171d
...
@@ -18,11 +18,12 @@
...
@@ -18,11 +18,12 @@
#define HWCAP_THUMBEE (1 << 11)
#define HWCAP_THUMBEE (1 << 11)
#define HWCAP_NEON (1 << 12)
#define HWCAP_NEON (1 << 12)
#define HWCAP_VFPv3 (1 << 13)
#define HWCAP_VFPv3 (1 << 13)
#define HWCAP_VFPv3D16 (1 << 14)
#define HWCAP_VFPv3D16 (1 << 14)
/* also set for VFPv4-D16 */
#define HWCAP_TLS (1 << 15)
#define HWCAP_TLS (1 << 15)
#define HWCAP_VFPv4 (1 << 16)
#define HWCAP_VFPv4 (1 << 16)
#define HWCAP_IDIVA (1 << 17)
#define HWCAP_IDIVA (1 << 17)
#define HWCAP_IDIVT (1 << 18)
#define HWCAP_IDIVT (1 << 18)
#define HWCAP_VFPD32 (1 << 19)
/* set if VFP has 32 regs (not 16) */
#define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT)
#define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT)
...
...
arch/arm/kernel/sched_clock.c
View file @
7ce0171d
...
@@ -107,13 +107,6 @@ static void sched_clock_poll(unsigned long wrap_ticks)
...
@@ -107,13 +107,6 @@ static void sched_clock_poll(unsigned long wrap_ticks)
update_sched_clock
();
update_sched_clock
();
}
}
void
__init
setup_sched_clock_needs_suspend
(
u32
(
*
read
)(
void
),
int
bits
,
unsigned
long
rate
)
{
setup_sched_clock
(
read
,
bits
,
rate
);
cd
.
needs_suspend
=
true
;
}
void
__init
setup_sched_clock
(
u32
(
*
read
)(
void
),
int
bits
,
unsigned
long
rate
)
void
__init
setup_sched_clock
(
u32
(
*
read
)(
void
),
int
bits
,
unsigned
long
rate
)
{
{
unsigned
long
r
,
w
;
unsigned
long
r
,
w
;
...
@@ -189,18 +182,15 @@ void __init sched_clock_postinit(void)
...
@@ -189,18 +182,15 @@ void __init sched_clock_postinit(void)
static
int
sched_clock_suspend
(
void
)
static
int
sched_clock_suspend
(
void
)
{
{
sched_clock_poll
(
sched_clock_timer
.
data
);
sched_clock_poll
(
sched_clock_timer
.
data
);
if
(
cd
.
needs_suspend
)
cd
.
suspended
=
true
;
cd
.
suspended
=
true
;
return
0
;
return
0
;
}
}
static
void
sched_clock_resume
(
void
)
static
void
sched_clock_resume
(
void
)
{
{
if
(
cd
.
needs_suspend
)
{
cd
.
epoch_cyc
=
read_sched_clock
();
cd
.
epoch_cyc
=
read_sched_clock
();
cd
.
epoch_cyc_copy
=
cd
.
epoch_cyc
;
cd
.
epoch_cyc_copy
=
cd
.
epoch_cyc
;
cd
.
suspended
=
false
;
cd
.
suspended
=
false
;
}
}
}
static
struct
syscore_ops
sched_clock_ops
=
{
static
struct
syscore_ops
sched_clock_ops
=
{
...
...
arch/arm/mm/alignment.c
View file @
7ce0171d
...
@@ -745,7 +745,7 @@ do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
...
@@ -745,7 +745,7 @@ do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
static
int
static
int
do_alignment
(
unsigned
long
addr
,
unsigned
int
fsr
,
struct
pt_regs
*
regs
)
do_alignment
(
unsigned
long
addr
,
unsigned
int
fsr
,
struct
pt_regs
*
regs
)
{
{
union
offset_union
offset
;
union
offset_union
uninitialized_var
(
offset
)
;
unsigned
long
instr
=
0
,
instrptr
;
unsigned
long
instr
=
0
,
instrptr
;
int
(
*
handler
)(
unsigned
long
addr
,
unsigned
long
instr
,
struct
pt_regs
*
regs
);
int
(
*
handler
)(
unsigned
long
addr
,
unsigned
long
instr
,
struct
pt_regs
*
regs
);
unsigned
int
type
;
unsigned
int
type
;
...
...
arch/arm/vfp/vfpmodule.c
View file @
7ce0171d
...
@@ -701,11 +701,14 @@ static int __init vfp_init(void)
...
@@ -701,11 +701,14 @@ static int __init vfp_init(void)
elf_hwcap
|=
HWCAP_VFPv3
;
elf_hwcap
|=
HWCAP_VFPv3
;
/*
/*
* Check for VFPv3 D16. CPUs in this configuration
* Check for VFPv3 D16 and VFPv4 D16. CPUs in
* only have 16 x 64bit registers.
* this configuration only have 16 x 64bit
* registers.
*/
*/
if
(((
fmrx
(
MVFR0
)
&
MVFR0_A_SIMD_MASK
))
==
1
)
if
(((
fmrx
(
MVFR0
)
&
MVFR0_A_SIMD_MASK
))
==
1
)
elf_hwcap
|=
HWCAP_VFPv3D16
;
elf_hwcap
|=
HWCAP_VFPv3D16
;
/* also v4-D16 */
else
elf_hwcap
|=
HWCAP_VFPD32
;
}
}
#endif
#endif
/*
/*
...
...
drivers/gpu/drm/drm_fops.c
View file @
7ce0171d
...
@@ -121,6 +121,8 @@ int drm_open(struct inode *inode, struct file *filp)
...
@@ -121,6 +121,8 @@ int drm_open(struct inode *inode, struct file *filp)
int
minor_id
=
iminor
(
inode
);
int
minor_id
=
iminor
(
inode
);
struct
drm_minor
*
minor
;
struct
drm_minor
*
minor
;
int
retcode
=
0
;
int
retcode
=
0
;
int
need_setup
=
0
;
struct
address_space
*
old_mapping
;
minor
=
idr_find
(
&
drm_minors_idr
,
minor_id
);
minor
=
idr_find
(
&
drm_minors_idr
,
minor_id
);
if
(
!
minor
)
if
(
!
minor
)
...
@@ -132,23 +134,37 @@ int drm_open(struct inode *inode, struct file *filp)
...
@@ -132,23 +134,37 @@ int drm_open(struct inode *inode, struct file *filp)
if
(
drm_device_is_unplugged
(
dev
))
if
(
drm_device_is_unplugged
(
dev
))
return
-
ENODEV
;
return
-
ENODEV
;
retcode
=
drm_open_helper
(
inode
,
filp
,
dev
);
if
(
!
retcode
)
{
atomic_inc
(
&
dev
->
counts
[
_DRM_STAT_OPENS
]);
if
(
!
dev
->
open_count
++
)
if
(
!
dev
->
open_count
++
)
retcode
=
drm_setup
(
dev
);
need_setup
=
1
;
}
if
(
!
retcode
)
{
mutex_lock
(
&
dev
->
struct_mutex
);
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
dev
->
dev_mapping
==
NULL
)
old_mapping
=
dev
->
dev_mapping
;
if
(
old_mapping
==
NULL
)
dev
->
dev_mapping
=
&
inode
->
i_data
;
dev
->
dev_mapping
=
&
inode
->
i_data
;
/* ihold ensures nobody can remove inode with our i_data */
/* ihold ensures nobody can remove inode with our i_data */
ihold
(
container_of
(
dev
->
dev_mapping
,
struct
inode
,
i_data
));
ihold
(
container_of
(
dev
->
dev_mapping
,
struct
inode
,
i_data
));
inode
->
i_mapping
=
dev
->
dev_mapping
;
inode
->
i_mapping
=
dev
->
dev_mapping
;
filp
->
f_mapping
=
dev
->
dev_mapping
;
filp
->
f_mapping
=
dev
->
dev_mapping
;
mutex_unlock
(
&
dev
->
struct_mutex
);
mutex_unlock
(
&
dev
->
struct_mutex
);
retcode
=
drm_open_helper
(
inode
,
filp
,
dev
);
if
(
retcode
)
goto
err_undo
;
atomic_inc
(
&
dev
->
counts
[
_DRM_STAT_OPENS
]);
if
(
need_setup
)
{
retcode
=
drm_setup
(
dev
);
if
(
retcode
)
goto
err_undo
;
}
}
return
0
;
err_undo:
mutex_lock
(
&
dev
->
struct_mutex
);
filp
->
f_mapping
=
old_mapping
;
inode
->
i_mapping
=
old_mapping
;
iput
(
container_of
(
dev
->
dev_mapping
,
struct
inode
,
i_data
));
dev
->
dev_mapping
=
old_mapping
;
mutex_unlock
(
&
dev
->
struct_mutex
);
dev
->
open_count
--
;
return
retcode
;
return
retcode
;
}
}
EXPORT_SYMBOL
(
drm_open
);
EXPORT_SYMBOL
(
drm_open
);
...
...
drivers/gpu/drm/radeon/evergreen.c
View file @
7ce0171d
...
@@ -1372,7 +1372,7 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
...
@@ -1372,7 +1372,7 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
WREG32
(
BIF_FB_EN
,
FB_READ_EN
|
FB_WRITE_EN
);
WREG32
(
BIF_FB_EN
,
FB_READ_EN
|
FB_WRITE_EN
);
for
(
i
=
0
;
i
<
rdev
->
num_crtc
;
i
++
)
{
for
(
i
=
0
;
i
<
rdev
->
num_crtc
;
i
++
)
{
if
(
save
->
crtc_enabled
)
{
if
(
save
->
crtc_enabled
[
i
]
)
{
if
(
ASIC_IS_DCE6
(
rdev
))
{
if
(
ASIC_IS_DCE6
(
rdev
))
{
tmp
=
RREG32
(
EVERGREEN_CRTC_BLANK_CONTROL
+
crtc_offsets
[
i
]);
tmp
=
RREG32
(
EVERGREEN_CRTC_BLANK_CONTROL
+
crtc_offsets
[
i
]);
tmp
|=
EVERGREEN_CRTC_BLANK_DATA_EN
;
tmp
|=
EVERGREEN_CRTC_BLANK_DATA_EN
;
...
...
drivers/hwmon/asb100.c
View file @
7ce0171d
drivers/hwmon/w83627ehf.c
View file @
7ce0171d
...
@@ -2083,6 +2083,7 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
...
@@ -2083,6 +2083,7 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
mutex_init
(
&
data
->
lock
);
mutex_init
(
&
data
->
lock
);
mutex_init
(
&
data
->
update_lock
);
mutex_init
(
&
data
->
update_lock
);
data
->
name
=
w83627ehf_device_names
[
sio_data
->
kind
];
data
->
name
=
w83627ehf_device_names
[
sio_data
->
kind
];
data
->
bank
=
0xff
;
/* Force initial bank selection */
platform_set_drvdata
(
pdev
,
data
);
platform_set_drvdata
(
pdev
,
data
);
/* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
/* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */
...
...
drivers/hwmon/w83627hf.c
View file @
7ce0171d
drivers/hwmon/w83781d.c
View file @
7ce0171d
drivers/hwmon/w83791d.c
View file @
7ce0171d
drivers/hwmon/w83792d.c
View file @
7ce0171d
drivers/hwmon/w83l786ng.c
View file @
7ce0171d
fs/gfs2/file.c
View file @
7ce0171d
...
@@ -516,15 +516,13 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
...
@@ -516,15 +516,13 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
struct
gfs2_holder
i_gh
;
struct
gfs2_holder
i_gh
;
int
error
;
int
error
;
gfs2_holder_init
(
ip
->
i_gl
,
LM_ST_SHARED
,
LM_FLAG_ANY
,
&
i_gh
);
error
=
gfs2_glock_nq_init
(
ip
->
i_gl
,
LM_ST_SHARED
,
LM_FLAG_ANY
,
error
=
gfs2_glock_nq
(
&
i_gh
);
&
i_gh
);
if
(
error
==
0
)
{
file_accessed
(
file
);
gfs2_glock_dq
(
&
i_gh
);
}
gfs2_holder_uninit
(
&
i_gh
);
if
(
error
)
if
(
error
)
return
error
;
return
error
;
/* grab lock to update inode */
gfs2_glock_dq_uninit
(
&
i_gh
);
file_accessed
(
file
);
}
}
vma
->
vm_ops
=
&
gfs2_vm_ops
;
vma
->
vm_ops
=
&
gfs2_vm_ops
;
...
@@ -677,10 +675,8 @@ static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
...
@@ -677,10 +675,8 @@ static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
size_t
writesize
=
iov_length
(
iov
,
nr_segs
);
size_t
writesize
=
iov_length
(
iov
,
nr_segs
);
struct
dentry
*
dentry
=
file
->
f_dentry
;
struct
dentry
*
dentry
=
file
->
f_dentry
;
struct
gfs2_inode
*
ip
=
GFS2_I
(
dentry
->
d_inode
);
struct
gfs2_inode
*
ip
=
GFS2_I
(
dentry
->
d_inode
);
struct
gfs2_sbd
*
sdp
;
int
ret
;
int
ret
;
sdp
=
GFS2_SB
(
file
->
f_mapping
->
host
);
ret
=
gfs2_rs_alloc
(
ip
);
ret
=
gfs2_rs_alloc
(
ip
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
...
...
fs/gfs2/lops.c
View file @
7ce0171d
...
@@ -393,12 +393,10 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
...
@@ -393,12 +393,10 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
struct
gfs2_meta_header
*
mh
;
struct
gfs2_meta_header
*
mh
;
struct
gfs2_trans
*
tr
;
struct
gfs2_trans
*
tr
;
lock_buffer
(
bd
->
bd_bh
);
gfs2_log_lock
(
sdp
);
tr
=
current
->
journal_info
;
tr
=
current
->
journal_info
;
tr
->
tr_touched
=
1
;
tr
->
tr_touched
=
1
;
if
(
!
list_empty
(
&
bd
->
bd_list
))
if
(
!
list_empty
(
&
bd
->
bd_list
))
goto
out
;
return
;
set_bit
(
GLF_LFLUSH
,
&
bd
->
bd_gl
->
gl_flags
);
set_bit
(
GLF_LFLUSH
,
&
bd
->
bd_gl
->
gl_flags
);
set_bit
(
GLF_DIRTY
,
&
bd
->
bd_gl
->
gl_flags
);
set_bit
(
GLF_DIRTY
,
&
bd
->
bd_gl
->
gl_flags
);
mh
=
(
struct
gfs2_meta_header
*
)
bd
->
bd_bh
->
b_data
;
mh
=
(
struct
gfs2_meta_header
*
)
bd
->
bd_bh
->
b_data
;
...
@@ -414,9 +412,6 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
...
@@ -414,9 +412,6 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
sdp
->
sd_log_num_buf
++
;
sdp
->
sd_log_num_buf
++
;
list_add
(
&
bd
->
bd_list
,
&
sdp
->
sd_log_le_buf
);
list_add
(
&
bd
->
bd_list
,
&
sdp
->
sd_log_le_buf
);
tr
->
tr_num_buf_new
++
;
tr
->
tr_num_buf_new
++
;
out:
gfs2_log_unlock
(
sdp
);
unlock_buffer
(
bd
->
bd_bh
);
}
}
static
void
gfs2_check_magic
(
struct
buffer_head
*
bh
)
static
void
gfs2_check_magic
(
struct
buffer_head
*
bh
)
...
@@ -621,7 +616,6 @@ static void revoke_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
...
@@ -621,7 +616,6 @@ static void revoke_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
static
void
revoke_lo_before_commit
(
struct
gfs2_sbd
*
sdp
)
static
void
revoke_lo_before_commit
(
struct
gfs2_sbd
*
sdp
)
{
{
struct
gfs2_log_descriptor
*
ld
;
struct
gfs2_meta_header
*
mh
;
struct
gfs2_meta_header
*
mh
;
unsigned
int
offset
;
unsigned
int
offset
;
struct
list_head
*
head
=
&
sdp
->
sd_log_le_revoke
;
struct
list_head
*
head
=
&
sdp
->
sd_log_le_revoke
;
...
@@ -634,7 +628,6 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp)
...
@@ -634,7 +628,6 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp)
length
=
gfs2_struct2blk
(
sdp
,
sdp
->
sd_log_num_revoke
,
sizeof
(
u64
));
length
=
gfs2_struct2blk
(
sdp
,
sdp
->
sd_log_num_revoke
,
sizeof
(
u64
));
page
=
gfs2_get_log_desc
(
sdp
,
GFS2_LOG_DESC_REVOKE
,
length
,
sdp
->
sd_log_num_revoke
);
page
=
gfs2_get_log_desc
(
sdp
,
GFS2_LOG_DESC_REVOKE
,
length
,
sdp
->
sd_log_num_revoke
);
ld
=
page_address
(
page
);
offset
=
sizeof
(
struct
gfs2_log_descriptor
);
offset
=
sizeof
(
struct
gfs2_log_descriptor
);
list_for_each_entry
(
bd
,
head
,
bd_list
)
{
list_for_each_entry
(
bd
,
head
,
bd_list
)
{
...
@@ -777,12 +770,10 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
...
@@ -777,12 +770,10 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
struct
address_space
*
mapping
=
bd
->
bd_bh
->
b_page
->
mapping
;
struct
address_space
*
mapping
=
bd
->
bd_bh
->
b_page
->
mapping
;
struct
gfs2_inode
*
ip
=
GFS2_I
(
mapping
->
host
);
struct
gfs2_inode
*
ip
=
GFS2_I
(
mapping
->
host
);
lock_buffer
(
bd
->
bd_bh
);
gfs2_log_lock
(
sdp
);
if
(
tr
)
if
(
tr
)
tr
->
tr_touched
=
1
;
tr
->
tr_touched
=
1
;
if
(
!
list_empty
(
&
bd
->
bd_list
))
if
(
!
list_empty
(
&
bd
->
bd_list
))
goto
out
;
return
;
set_bit
(
GLF_LFLUSH
,
&
bd
->
bd_gl
->
gl_flags
);
set_bit
(
GLF_LFLUSH
,
&
bd
->
bd_gl
->
gl_flags
);
set_bit
(
GLF_DIRTY
,
&
bd
->
bd_gl
->
gl_flags
);
set_bit
(
GLF_DIRTY
,
&
bd
->
bd_gl
->
gl_flags
);
if
(
gfs2_is_jdata
(
ip
))
{
if
(
gfs2_is_jdata
(
ip
))
{
...
@@ -793,9 +784,6 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
...
@@ -793,9 +784,6 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
}
else
{
}
else
{
list_add_tail
(
&
bd
->
bd_list
,
&
sdp
->
sd_log_le_ordered
);
list_add_tail
(
&
bd
->
bd_list
,
&
sdp
->
sd_log_le_ordered
);
}
}
out:
gfs2_log_unlock
(
sdp
);
unlock_buffer
(
bd
->
bd_bh
);
}
}
/**
/**
...
...
fs/gfs2/quota.c
View file @
7ce0171d
...
@@ -497,8 +497,11 @@ int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid)
...
@@ -497,8 +497,11 @@ int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid)
struct
gfs2_quota_data
**
qd
;
struct
gfs2_quota_data
**
qd
;
int
error
;
int
error
;
if
(
ip
->
i_res
==
NULL
)
if
(
ip
->
i_res
==
NULL
)
{
gfs2_rs_alloc
(
ip
);
error
=
gfs2_rs_alloc
(
ip
);
if
(
error
)
return
error
;
}
qd
=
ip
->
i_res
->
rs_qa_qd
;
qd
=
ip
->
i_res
->
rs_qa_qd
;
...
...
fs/gfs2/rgrp.c
View file @
7ce0171d
...
@@ -553,7 +553,6 @@ void gfs2_free_clones(struct gfs2_rgrpd *rgd)
...
@@ -553,7 +553,6 @@ void gfs2_free_clones(struct gfs2_rgrpd *rgd)
*/
*/
int
gfs2_rs_alloc
(
struct
gfs2_inode
*
ip
)
int
gfs2_rs_alloc
(
struct
gfs2_inode
*
ip
)
{
{
int
error
=
0
;
struct
gfs2_blkreserv
*
res
;
struct
gfs2_blkreserv
*
res
;
if
(
ip
->
i_res
)
if
(
ip
->
i_res
)
...
@@ -561,7 +560,7 @@ int gfs2_rs_alloc(struct gfs2_inode *ip)
...
@@ -561,7 +560,7 @@ int gfs2_rs_alloc(struct gfs2_inode *ip)
res
=
kmem_cache_zalloc
(
gfs2_rsrv_cachep
,
GFP_NOFS
);
res
=
kmem_cache_zalloc
(
gfs2_rsrv_cachep
,
GFP_NOFS
);
if
(
!
res
)
if
(
!
res
)
error
=
-
ENOMEM
;
return
-
ENOMEM
;
RB_CLEAR_NODE
(
&
res
->
rs_node
);
RB_CLEAR_NODE
(
&
res
->
rs_node
);
...
@@ -571,7 +570,7 @@ int gfs2_rs_alloc(struct gfs2_inode *ip)
...
@@ -571,7 +570,7 @@ int gfs2_rs_alloc(struct gfs2_inode *ip)
else
else
ip
->
i_res
=
res
;
ip
->
i_res
=
res
;
up_write
(
&
ip
->
i_rw_mutex
);
up_write
(
&
ip
->
i_rw_mutex
);
return
error
;
return
0
;
}
}
static
void
dump_rs
(
struct
seq_file
*
seq
,
const
struct
gfs2_blkreserv
*
rs
)
static
void
dump_rs
(
struct
seq_file
*
seq
,
const
struct
gfs2_blkreserv
*
rs
)
...
@@ -1263,7 +1262,9 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
...
@@ -1263,7 +1262,9 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
int
ret
=
0
;
int
ret
=
0
;
u64
amt
;
u64
amt
;
u64
trimmed
=
0
;
u64
trimmed
=
0
;
u64
start
,
end
,
minlen
;
unsigned
int
x
;
unsigned
int
x
;
unsigned
bs_shift
=
sdp
->
sd_sb
.
sb_bsize_shift
;
if
(
!
capable
(
CAP_SYS_ADMIN
))
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
return
-
EPERM
;
...
@@ -1271,19 +1272,25 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
...
@@ -1271,19 +1272,25 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
if
(
!
blk_queue_discard
(
q
))
if
(
!
blk_queue_discard
(
q
))
return
-
EOPNOTSUPP
;
return
-
EOPNOTSUPP
;
if
(
argp
==
NULL
)
{
if
(
copy_from_user
(
&
r
,
argp
,
sizeof
(
r
)))
r
.
start
=
0
;
r
.
len
=
ULLONG_MAX
;
r
.
minlen
=
0
;
}
else
if
(
copy_from_user
(
&
r
,
argp
,
sizeof
(
r
)))
return
-
EFAULT
;
return
-
EFAULT
;
ret
=
gfs2_rindex_update
(
sdp
);
ret
=
gfs2_rindex_update
(
sdp
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
rgd
=
gfs2_blk2rgrpd
(
sdp
,
r
.
start
,
0
);
start
=
r
.
start
>>
bs_shift
;
rgd_end
=
gfs2_blk2rgrpd
(
sdp
,
r
.
start
+
r
.
len
,
0
);
end
=
start
+
(
r
.
len
>>
bs_shift
);
minlen
=
max_t
(
u64
,
r
.
minlen
,
q
->
limits
.
discard_granularity
)
>>
bs_shift
;
rgd
=
gfs2_blk2rgrpd
(
sdp
,
start
,
0
);
rgd_end
=
gfs2_blk2rgrpd
(
sdp
,
end
-
1
,
0
);
if
(
end
<=
start
||
minlen
>
sdp
->
sd_max_rg_data
||
start
>
rgd_end
->
rd_data0
+
rgd_end
->
rd_data
)
return
-
EINVAL
;
while
(
1
)
{
while
(
1
)
{
...
@@ -1295,7 +1302,9 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
...
@@ -1295,7 +1302,9 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
/* Trim each bitmap in the rgrp */
/* Trim each bitmap in the rgrp */
for
(
x
=
0
;
x
<
rgd
->
rd_length
;
x
++
)
{
for
(
x
=
0
;
x
<
rgd
->
rd_length
;
x
++
)
{
struct
gfs2_bitmap
*
bi
=
rgd
->
rd_bits
+
x
;
struct
gfs2_bitmap
*
bi
=
rgd
->
rd_bits
+
x
;
ret
=
gfs2_rgrp_send_discards
(
sdp
,
rgd
->
rd_data0
,
NULL
,
bi
,
r
.
minlen
,
&
amt
);
ret
=
gfs2_rgrp_send_discards
(
sdp
,
rgd
->
rd_data0
,
NULL
,
bi
,
minlen
,
&
amt
);
if
(
ret
)
{
if
(
ret
)
{
gfs2_glock_dq_uninit
(
&
gh
);
gfs2_glock_dq_uninit
(
&
gh
);
goto
out
;
goto
out
;
...
@@ -1324,7 +1333,7 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
...
@@ -1324,7 +1333,7 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
out:
out:
r
.
len
=
trimmed
<<
9
;
r
.
len
=
trimmed
<<
9
;
if
(
argp
&&
copy_to_user
(
argp
,
&
r
,
sizeof
(
r
)))
if
(
copy_to_user
(
argp
,
&
r
,
sizeof
(
r
)))
return
-
EFAULT
;
return
-
EFAULT
;
return
ret
;
return
ret
;
...
...
fs/gfs2/super.c
View file @
7ce0171d
...
@@ -810,7 +810,8 @@ static void gfs2_dirty_inode(struct inode *inode, int flags)
...
@@ -810,7 +810,8 @@ static void gfs2_dirty_inode(struct inode *inode, int flags)
return
;
return
;
}
}
need_unlock
=
1
;
need_unlock
=
1
;
}
}
else
if
(
WARN_ON_ONCE
(
ip
->
i_gl
->
gl_state
!=
LM_ST_EXCLUSIVE
))
return
;
if
(
current
->
journal_info
==
NULL
)
{
if
(
current
->
journal_info
==
NULL
)
{
ret
=
gfs2_trans_begin
(
sdp
,
RES_DINODE
,
0
);
ret
=
gfs2_trans_begin
(
sdp
,
RES_DINODE
,
0
);
...
...
fs/gfs2/trans.c
View file @
7ce0171d
...
@@ -155,14 +155,22 @@ void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta)
...
@@ -155,14 +155,22 @@ void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta)
struct
gfs2_sbd
*
sdp
=
gl
->
gl_sbd
;
struct
gfs2_sbd
*
sdp
=
gl
->
gl_sbd
;
struct
gfs2_bufdata
*
bd
;
struct
gfs2_bufdata
*
bd
;
lock_buffer
(
bh
);
gfs2_log_lock
(
sdp
);
bd
=
bh
->
b_private
;
bd
=
bh
->
b_private
;
if
(
bd
)
if
(
bd
)
gfs2_assert
(
sdp
,
bd
->
bd_gl
==
gl
);
gfs2_assert
(
sdp
,
bd
->
bd_gl
==
gl
);
else
{
else
{
gfs2_log_unlock
(
sdp
);
unlock_buffer
(
bh
);
gfs2_attach_bufdata
(
gl
,
bh
,
meta
);
gfs2_attach_bufdata
(
gl
,
bh
,
meta
);
bd
=
bh
->
b_private
;
bd
=
bh
->
b_private
;
lock_buffer
(
bh
);
gfs2_log_lock
(
sdp
);
}
}
lops_add
(
sdp
,
bd
);
lops_add
(
sdp
,
bd
);
gfs2_log_unlock
(
sdp
);
unlock_buffer
(
bh
);
}
}
void
gfs2_trans_add_revoke
(
struct
gfs2_sbd
*
sdp
,
struct
gfs2_bufdata
*
bd
)
void
gfs2_trans_add_revoke
(
struct
gfs2_sbd
*
sdp
,
struct
gfs2_bufdata
*
bd
)
...
...
fs/nfs/nfs4_fs.h
View file @
7ce0171d
...
@@ -308,13 +308,13 @@ extern void nfs4_renew_state(struct work_struct *);
...
@@ -308,13 +308,13 @@ extern void nfs4_renew_state(struct work_struct *);
/* nfs4state.c */
/* nfs4state.c */
struct
rpc_cred
*
nfs4_get_setclientid_cred
(
struct
nfs_client
*
clp
);
struct
rpc_cred
*
nfs4_get_setclientid_cred
(
struct
nfs_client
*
clp
);
struct
rpc_cred
*
nfs4_get_machine_cred_locked
(
struct
nfs_client
*
clp
);
struct
rpc_cred
*
nfs4_get_renew_cred_locked
(
struct
nfs_client
*
clp
);
struct
rpc_cred
*
nfs4_get_renew_cred_locked
(
struct
nfs_client
*
clp
);
int
nfs4_discover_server_trunking
(
struct
nfs_client
*
clp
,
int
nfs4_discover_server_trunking
(
struct
nfs_client
*
clp
,
struct
nfs_client
**
);
struct
nfs_client
**
);
int
nfs40_discover_server_trunking
(
struct
nfs_client
*
clp
,
int
nfs40_discover_server_trunking
(
struct
nfs_client
*
clp
,
struct
nfs_client
**
,
struct
rpc_cred
*
);
struct
nfs_client
**
,
struct
rpc_cred
*
);
#if defined(CONFIG_NFS_V4_1)
#if defined(CONFIG_NFS_V4_1)
struct
rpc_cred
*
nfs4_get_machine_cred_locked
(
struct
nfs_client
*
clp
);
struct
rpc_cred
*
nfs4_get_exchange_id_cred
(
struct
nfs_client
*
clp
);
struct
rpc_cred
*
nfs4_get_exchange_id_cred
(
struct
nfs_client
*
clp
);
int
nfs41_discover_server_trunking
(
struct
nfs_client
*
clp
,
int
nfs41_discover_server_trunking
(
struct
nfs_client
*
clp
,
struct
nfs_client
**
,
struct
rpc_cred
*
);
struct
nfs_client
**
,
struct
rpc_cred
*
);
...
...
fs/nfs/nfs4proc.c
View file @
7ce0171d
...
@@ -3782,8 +3782,13 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
...
@@ -3782,8 +3782,13 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
goto
out_free
;
goto
out_free
;
}
}
nfs4_write_cached_acl
(
inode
,
pages
,
res
.
acl_data_offset
,
res
.
acl_len
);
nfs4_write_cached_acl
(
inode
,
pages
,
res
.
acl_data_offset
,
res
.
acl_len
);
if
(
buf
)
if
(
buf
)
{
if
(
res
.
acl_len
>
buflen
)
{
ret
=
-
ERANGE
;
goto
out_free
;
}
_copy_from_pages
(
buf
,
pages
,
res
.
acl_data_offset
,
res
.
acl_len
);
_copy_from_pages
(
buf
,
pages
,
res
.
acl_data_offset
,
res
.
acl_len
);
}
out_ok:
out_ok:
ret
=
res
.
acl_len
;
ret
=
res
.
acl_len
;
out_free:
out_free:
...
...
fs/nfs/nfs4xdr.c
View file @
7ce0171d
...
@@ -271,6 +271,8 @@ static int nfs4_stat_to_errno(int);
...
@@ -271,6 +271,8 @@ static int nfs4_stat_to_errno(int);
#if defined(CONFIG_NFS_V4_1)
#if defined(CONFIG_NFS_V4_1)
#define NFS4_MAX_MACHINE_NAME_LEN (64)
#define NFS4_MAX_MACHINE_NAME_LEN (64)
#define IMPL_NAME_LIMIT (sizeof(utsname()->sysname) + sizeof(utsname()->release) + \
sizeof(utsname()->version) + sizeof(utsname()->machine) + 8)
#define encode_exchange_id_maxsz (op_encode_hdr_maxsz + \
#define encode_exchange_id_maxsz (op_encode_hdr_maxsz + \
encode_verifier_maxsz + \
encode_verifier_maxsz + \
...
@@ -283,7 +285,7 @@ static int nfs4_stat_to_errno(int);
...
@@ -283,7 +285,7 @@ static int nfs4_stat_to_errno(int);
1
/* nii_domain */
+ \
1
/* nii_domain */
+ \
XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
1
/* nii_name */
+ \
1
/* nii_name */
+ \
XDR_QUADLEN(
NFS4_OPAQU
E_LIMIT) + \
XDR_QUADLEN(
IMPL_NAM
E_LIMIT) + \
3
/* nii_date */
)
3
/* nii_date */
)
#define decode_exchange_id_maxsz (op_decode_hdr_maxsz + \
#define decode_exchange_id_maxsz (op_decode_hdr_maxsz + \
2
/* eir_clientid */
+ \
2
/* eir_clientid */
+ \
...
@@ -1712,7 +1714,7 @@ static void encode_exchange_id(struct xdr_stream *xdr,
...
@@ -1712,7 +1714,7 @@ static void encode_exchange_id(struct xdr_stream *xdr,
struct
compound_hdr
*
hdr
)
struct
compound_hdr
*
hdr
)
{
{
__be32
*
p
;
__be32
*
p
;
char
impl_name
[
NFS4_OPAQU
E_LIMIT
];
char
impl_name
[
IMPL_NAM
E_LIMIT
];
int
len
=
0
;
int
len
=
0
;
encode_op_hdr
(
xdr
,
OP_EXCHANGE_ID
,
decode_exchange_id_maxsz
,
hdr
);
encode_op_hdr
(
xdr
,
OP_EXCHANGE_ID
,
decode_exchange_id_maxsz
,
hdr
);
...
@@ -1727,7 +1729,7 @@ static void encode_exchange_id(struct xdr_stream *xdr,
...
@@ -1727,7 +1729,7 @@ static void encode_exchange_id(struct xdr_stream *xdr,
if
(
send_implementation_id
&&
if
(
send_implementation_id
&&
sizeof
(
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
)
>
1
&&
sizeof
(
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
)
>
1
&&
sizeof
(
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
)
sizeof
(
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
)
<=
NFS4_OPAQUE_LIMIT
+
1
)
<=
sizeof
(
impl_name
)
+
1
)
len
=
snprintf
(
impl_name
,
sizeof
(
impl_name
),
"%s %s %s %s"
,
len
=
snprintf
(
impl_name
,
sizeof
(
impl_name
),
"%s %s %s %s"
,
utsname
()
->
sysname
,
utsname
()
->
release
,
utsname
()
->
sysname
,
utsname
()
->
release
,
utsname
()
->
version
,
utsname
()
->
machine
);
utsname
()
->
version
,
utsname
()
->
machine
);
...
...
fs/nfs/write.c
View file @
7ce0171d
...
@@ -879,7 +879,7 @@ static bool nfs_write_pageuptodate(struct page *page, struct inode *inode)
...
@@ -879,7 +879,7 @@ static bool nfs_write_pageuptodate(struct page *page, struct inode *inode)
{
{
if
(
nfs_have_delegated_attributes
(
inode
))
if
(
nfs_have_delegated_attributes
(
inode
))
goto
out
;
goto
out
;
if
(
NFS_I
(
inode
)
->
cache_validity
&
NFS_INO_REVAL_PAGECACHE
)
if
(
NFS_I
(
inode
)
->
cache_validity
&
(
NFS_INO_INVALID_DATA
|
NFS_INO_REVAL_PAGECACHE
)
)
return
false
;
return
false
;
out:
out:
return
PageUptodate
(
page
)
!=
0
;
return
PageUptodate
(
page
)
!=
0
;
...
@@ -1823,7 +1823,7 @@ int __init nfs_init_writepagecache(void)
...
@@ -1823,7 +1823,7 @@ int __init nfs_init_writepagecache(void)
goto
out_destroy_write_mempool
;
goto
out_destroy_write_mempool
;
nfs_commit_mempool
=
mempool_create_slab_pool
(
MIN_POOL_COMMIT
,
nfs_commit_mempool
=
mempool_create_slab_pool
(
MIN_POOL_COMMIT
,
nfs_
w
data_cachep
);
nfs_
c
data_cachep
);
if
(
nfs_commit_mempool
==
NULL
)
if
(
nfs_commit_mempool
==
NULL
)
goto
out_destroy_commit_cache
;
goto
out_destroy_commit_cache
;
...
...
net/sunrpc/rpc_pipe.c
View file @
7ce0171d
...
@@ -1152,14 +1152,19 @@ static void rpc_kill_sb(struct super_block *sb)
...
@@ -1152,14 +1152,19 @@ static void rpc_kill_sb(struct super_block *sb)
struct
sunrpc_net
*
sn
=
net_generic
(
net
,
sunrpc_net_id
);
struct
sunrpc_net
*
sn
=
net_generic
(
net
,
sunrpc_net_id
);
mutex_lock
(
&
sn
->
pipefs_sb_lock
);
mutex_lock
(
&
sn
->
pipefs_sb_lock
);
if
(
sn
->
pipefs_sb
!=
sb
)
{
mutex_unlock
(
&
sn
->
pipefs_sb_lock
);
goto
out
;
}
sn
->
pipefs_sb
=
NULL
;
sn
->
pipefs_sb
=
NULL
;
mutex_unlock
(
&
sn
->
pipefs_sb_lock
);
mutex_unlock
(
&
sn
->
pipefs_sb_lock
);
put_net
(
net
);
dprintk
(
"RPC: sending pipefs UMOUNT notification for net %p%s
\n
"
,
dprintk
(
"RPC: sending pipefs UMOUNT notification for net %p%s
\n
"
,
net
,
NET_NAME
(
net
));
net
,
NET_NAME
(
net
));
blocking_notifier_call_chain
(
&
rpc_pipefs_notifier_list
,
blocking_notifier_call_chain
(
&
rpc_pipefs_notifier_list
,
RPC_PIPEFS_UMOUNT
,
RPC_PIPEFS_UMOUNT
,
sb
);
sb
);
put_net
(
net
);
out:
kill_litter_super
(
sb
);
kill_litter_super
(
sb
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment