提交 5f47c7ea 编写于 作者: A Al Viro 提交者: Linus Torvalds

coda breakage

	a) switch by loff_t == __cmpdi2 use.  Replaced with a couple
of obvious ifs; update of ->f_pos in the first one makes sure that we
do the right thing in all cases.
	b) block_signals() and unblock_signals() are globals on UML.
Renamed coda ones; in principle UML probably ought to do rename as
well, but that's another story.
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 c65c5131
...@@ -510,20 +510,20 @@ static int coda_venus_readdir(struct file *coda_file, void *buf, ...@@ -510,20 +510,20 @@ static int coda_venus_readdir(struct file *coda_file, void *buf,
vdir = kmalloc(sizeof(*vdir), GFP_KERNEL); vdir = kmalloc(sizeof(*vdir), GFP_KERNEL);
if (!vdir) return -ENOMEM; if (!vdir) return -ENOMEM;
switch (coda_file->f_pos) { if (coda_file->f_pos == 0) {
case 0:
ret = filldir(buf, ".", 1, 0, de->d_inode->i_ino, DT_DIR); ret = filldir(buf, ".", 1, 0, de->d_inode->i_ino, DT_DIR);
if (ret < 0) break; if (ret < 0)
goto out;
result++; result++;
coda_file->f_pos++; coda_file->f_pos++;
/* fallthrough */ }
case 1: if (coda_file->f_pos == 1) {
ret = filldir(buf, "..", 2, 1, de->d_parent->d_inode->i_ino, DT_DIR); ret = filldir(buf, "..", 2, 1, de->d_parent->d_inode->i_ino, DT_DIR);
if (ret < 0) break; if (ret < 0)
goto out;
result++; result++;
coda_file->f_pos++; coda_file->f_pos++;
/* fallthrough */ }
default:
while (1) { while (1) {
/* read entries from the directory file */ /* read entries from the directory file */
ret = kernel_read(host_file, coda_file->f_pos - 2, (char *)vdir, ret = kernel_read(host_file, coda_file->f_pos - 2, (char *)vdir,
...@@ -578,7 +578,7 @@ static int coda_venus_readdir(struct file *coda_file, void *buf, ...@@ -578,7 +578,7 @@ static int coda_venus_readdir(struct file *coda_file, void *buf,
* we've already established it is non-zero. */ * we've already established it is non-zero. */
coda_file->f_pos += vdir->d_reclen; coda_file->f_pos += vdir->d_reclen;
} }
} out:
kfree(vdir); kfree(vdir);
return result ? result : ret; return result ? result : ret;
} }
......
...@@ -632,7 +632,7 @@ int venus_statfs(struct dentry *dentry, struct kstatfs *sfs) ...@@ -632,7 +632,7 @@ int venus_statfs(struct dentry *dentry, struct kstatfs *sfs)
/* /*
* coda_upcall and coda_downcall routines. * coda_upcall and coda_downcall routines.
*/ */
static void block_signals(sigset_t *old) static void coda_block_signals(sigset_t *old)
{ {
spin_lock_irq(&current->sighand->siglock); spin_lock_irq(&current->sighand->siglock);
*old = current->blocked; *old = current->blocked;
...@@ -646,7 +646,7 @@ static void block_signals(sigset_t *old) ...@@ -646,7 +646,7 @@ static void block_signals(sigset_t *old)
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
} }
static void unblock_signals(sigset_t *old) static void coda_unblock_signals(sigset_t *old)
{ {
spin_lock_irq(&current->sighand->siglock); spin_lock_irq(&current->sighand->siglock);
current->blocked = *old; current->blocked = *old;
...@@ -672,7 +672,7 @@ static inline void coda_waitfor_upcall(struct upc_req *req) ...@@ -672,7 +672,7 @@ static inline void coda_waitfor_upcall(struct upc_req *req)
sigset_t old; sigset_t old;
int blocked; int blocked;
block_signals(&old); coda_block_signals(&old);
blocked = 1; blocked = 1;
add_wait_queue(&req->uc_sleep, &wait); add_wait_queue(&req->uc_sleep, &wait);
...@@ -689,7 +689,7 @@ static inline void coda_waitfor_upcall(struct upc_req *req) ...@@ -689,7 +689,7 @@ static inline void coda_waitfor_upcall(struct upc_req *req)
if (blocked && time_after(jiffies, timeout) && if (blocked && time_after(jiffies, timeout) &&
CODA_INTERRUPTIBLE(req)) CODA_INTERRUPTIBLE(req))
{ {
unblock_signals(&old); coda_unblock_signals(&old);
blocked = 0; blocked = 0;
} }
...@@ -704,7 +704,7 @@ static inline void coda_waitfor_upcall(struct upc_req *req) ...@@ -704,7 +704,7 @@ static inline void coda_waitfor_upcall(struct upc_req *req)
schedule(); schedule();
} }
if (blocked) if (blocked)
unblock_signals(&old); coda_unblock_signals(&old);
remove_wait_queue(&req->uc_sleep, &wait); remove_wait_queue(&req->uc_sleep, &wait);
set_current_state(TASK_RUNNING); set_current_state(TASK_RUNNING);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册