lkml.org 
[lkml]   [2007]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectf_owner.lock and file->pos updates
Suppose I want to create an atomic llseek+writev operation.  Is this
more or less sufficient:

ssize_t ret = -EBADF;
file = fget_light(fd, &fput_needed);
if (file) {
if (unlikely(origin > 2)) {
ret = -EINVAL;
} else {
write_lock_irq(&file->f_owner.lock);
pos = vfs_llseek(file, ((loff_t) offset_high <<
32) | offset_low, origin);
ret = (ssize_t)pos;
if (likely(ret >= 0)) {
ret = vfs_writev(file, vec, vlen, &pos);
file_pos_write(file, pos);
}
write_unlock_irq(&file->f_owner.lock);
}
fput_light(file, fput_needed);
}

Or is this the wrong sort of lock to be using to protect against
having file->pos altered by another thread executing through the same
code?

Cheers,
- Michael
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2007-03-07 20:21    [W:0.065 / U:0.276 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site