From b9b2dae910f6eec020955be6ded8c4118f965b0f Mon Sep 17 00:00:00 2001 From: Rahul Deshmukh Date: Tue, 4 May 2010 20:46:01 +0530 Subject: [PATCH] b=21502 symlink compatibility between 1.6 and 2.0 Fixed the sleep in spin lock, inode->i_sb->s_op-> dirty_inode(inode) was called with spin lock held. i=bzzz i=pravin --- lustre/osd/osd_handler.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lustre/osd/osd_handler.c b/lustre/osd/osd_handler.c index cf60236..b826a71 100644 --- a/lustre/osd/osd_handler.c +++ b/lustre/osd/osd_handler.c @@ -2450,6 +2450,7 @@ static int osd_ldiskfs_write_record(struct inode *inode, void *buf, int bufsize, int err = 0; int size; int boffs; + int dirty_inode = 0; while (bufsize > 0) { if (bh != NULL) @@ -2494,9 +2495,11 @@ static int osd_ldiskfs_write_record(struct inode *inode, void *buf, int bufsize, i_size_write(inode, new_size); if (i_size_read(inode) > LDISKFS_I(inode)->i_disksize) { LDISKFS_I(inode)->i_disksize = i_size_read(inode); - inode->i_sb->s_op->dirty_inode(inode); + dirty_inode = 1; } spin_unlock(&inode->i_lock); + if (dirty_inode) + inode->i_sb->s_op->dirty_inode(inode); } if (err == 0) -- 1.8.3.1