/* Open floppy tape device */ static int zft_open(struct inode *ino, struct file *filep) { int result; TRACE_FUN(ft_t_flow); TRACE(ft_t_flow, "called for minor %d", MINOR(ino->i_rdev)); if (busy_flag) { TRACE_ABORT(-EBUSY, ft_t_warn, "failed: already busy"); } busy_flag = 1; if ((MINOR(ino->i_rdev) & ~(ZFT_MINOR_OP_MASK | FTAPE_NO_REWIND)) > FTAPE_SEL_D) { busy_flag = 0; TRACE_ABORT(-ENXIO, ft_t_err, "failed: illegal unit nr"); } orig_sigmask = current->blocked; sigfillset(¤t->blocked); result = _zft_open(MINOR(ino->i_rdev), filep->f_flags & O_ACCMODE); if (result < 0) { current->blocked = orig_sigmask; /* restore mask */ busy_flag = 0; TRACE_ABORT(result, ft_t_err, "_ftape_open failed"); } else { /* Mask signals that will disturb proper operation of the * program that is calling. */ current->blocked = orig_sigmask; sigaddsetmask (¤t->blocked, _DO_BLOCK); TRACE_EXIT 0; } }
/* Open floppy tape device */ static int zft_open(struct inode *ino, struct file *filep) { int result; TRACE_FUN(ft_t_flow); nonseekable_open(ino, filep); TRACE(ft_t_flow, "called for minor %d", iminor(ino)); if ( test_and_set_bit(0,&busy_flag) ) { TRACE_ABORT(-EBUSY, ft_t_warn, "failed: already busy"); } if ((iminor(ino) & ~(ZFT_MINOR_OP_MASK | FTAPE_NO_REWIND)) > FTAPE_SEL_D) { clear_bit(0,&busy_flag); TRACE_ABORT(-ENXIO, ft_t_err, "failed: invalid unit nr"); } orig_sigmask = current->blocked; sigfillset(¤t->blocked); result = _zft_open(iminor(ino), filep->f_flags & O_ACCMODE); if (result < 0) { current->blocked = orig_sigmask; /* restore mask */ clear_bit(0,&busy_flag); TRACE_ABORT(result, ft_t_err, "_ftape_open failed"); } else { /* Mask signals that will disturb proper operation of the * program that is calling. */ current->blocked = orig_sigmask; sigaddsetmask (¤t->blocked, _DO_BLOCK); TRACE_EXIT 0; } }