Messages in this thread |  | | | Date | Fri, 1 Feb 2008 15:34:11 -0800 | | From | Andrew Morton <> | | Subject | Re: 2.6.24-rc8-mm1: sparc64 warning at fs/file_table.c:49 __fput+0x1a8/0x1e0() | |
On Tue, 22 Jan 2008 15:13:58 -0800
Dave Hansen <haveblue@us.ibm.com> wrote:
> @@ -566,10 +567,26 @@ static void mark_files_ro(struct super_b
> {
> struct file *f;
>
> +retry:
> file_list_lock();
> list_for_each_entry(f, &sb->s_files, f_u.fu_list) {
> - if (S_ISREG(f->f_path.dentry->d_inode->i_mode) && file_count(f))
> - f->f_mode &= ~FMODE_WRITE;
> + struct vfsmount mnt;
> + if (!S_ISREG(f->f_path.dentry->d_inode->i_mode))
> + continue;
> + if (!file_count(f))
> + continue;
> + if (!(f->f_mode & FMODE_WRITE))
> + continue;
> + f->f_mode &= ~FMODE_WRITE;
> + f->f_mnt_write_state |= FILE_MNT_WRITE_RELEASED;
> + mnt = f->f_path.mnt;
> + file_list_unlock();
> + /*
> + * This can sleep, so we can't hold
> + * the file_list_lock() spinlock.
> + */
> + mnt_drop_write(mnt);
> + goto retry;
> }
> file_list_unlock();
> }
> _
this doesn't even compile. How much confidence am I supposed
to have that once I've fixed it, it will actually work?
|  |