History

fnctl: f_modown should call write_lock_irqsave/restore

Commit 703625118069f9f8960d356676662d3db5a9d116 exposed that f_modown() should call write_lock_irqsave instead of just write_lock_irq so that because a caller could have a spinlock held and it would not be good to renable interrupts.

Greg Kroah-Hartman committed 16 years ago

Commit b04da8b1 parent 9a3cbe31 file · +4 −2Browse files

Unified · Split

fs/fcntl.c+4−2
@@ -199,7 +199,9 @@ static int setfl(int fd, struct file * filp, unsigned long arg) · 198 unmodified lines
199static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,199static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
200 int force)200 int force)
201{201{
202 write_lock_irq(&filp->f_owner.lock);202 unsigned long flags;
203
204 write_lock_irqsave(&filp->f_owner.lock, flags);
203 if (force || !filp->f_owner.pid) {205 if (force || !filp->f_owner.pid) {
204 put_pid(filp->f_owner.pid);206 put_pid(filp->f_owner.pid);
205 filp->f_owner.pid = get_pid(pid);207 filp->f_owner.pid = get_pid(pid);
@@ -211,7 +213,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, · 5 unmodified lines
211 filp->f_owner.euid = cred->euid;213 filp->f_owner.euid = cred->euid;
212 }214 }
213 }215 }
214 write_unlock_irq(&filp->f_owner.lock);216 write_unlock_irqrestore(&filp->f_owner.lock, flags);
215}217}
216 218
217int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,219int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,