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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to