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: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c65c5131b3
commit
5f47c7eac6
@ -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,
|
|||||||
* 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)
|
|||||||
/*
|
/*
|
||||||
* 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(¤t->sighand->siglock);
|
spin_lock_irq(¤t->sighand->siglock);
|
||||||
*old = current->blocked;
|
*old = current->blocked;
|
||||||
@ -646,7 +646,7 @@ static void block_signals(sigset_t *old)
|
|||||||
spin_unlock_irq(¤t->sighand->siglock);
|
spin_unlock_irq(¤t->sighand->siglock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unblock_signals(sigset_t *old)
|
static void coda_unblock_signals(sigset_t *old)
|
||||||
{
|
{
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
spin_lock_irq(¤t->sighand->siglock);
|
||||||
current->blocked = *old;
|
current->blocked = *old;
|
||||||
@ -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)
|
|||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user